keycloakify 7.6.9 → 7.7.2
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/README.md +8 -1
- package/account/kcContext/createGetKcContext.d.ts +1 -1
- package/account/kcContext/createGetKcContext.js +3 -3
- package/account/kcContext/createGetKcContext.js.map +1 -1
- package/account/kcContext/getKcContext.d.ts +3 -1
- package/account/kcContext/getKcContext.js +3 -1
- package/account/kcContext/getKcContext.js.map +1 -1
- package/bin/keycloakify/BuildOptions.d.ts +1 -0
- package/bin/keycloakify/BuildOptions.js +3 -2
- package/bin/keycloakify/BuildOptions.js.map +1 -1
- package/bin/keycloakify/generateTheme/downloadKeycloakStaticResources.d.ts +7 -0
- package/bin/keycloakify/generateTheme/downloadKeycloakStaticResources.js +100 -0
- package/bin/keycloakify/generateTheme/downloadKeycloakStaticResources.js.map +1 -0
- package/bin/keycloakify/{generateKeycloakThemeResources.d.ts → generateTheme/generateTheme.d.ts} +2 -2
- package/bin/keycloakify/{generateKeycloakThemeResources.js → generateTheme/generateTheme.js} +39 -37
- package/bin/keycloakify/generateTheme/generateTheme.js.map +1 -0
- package/bin/keycloakify/generateTheme/index.d.ts +1 -0
- package/bin/keycloakify/generateTheme/index.js +18 -0
- package/bin/keycloakify/generateTheme/index.js.map +1 -0
- package/bin/keycloakify/keycloakify.js +2 -3
- package/bin/keycloakify/keycloakify.js.map +1 -1
- package/bin/tools/grant-exec-perms.js +2 -1
- package/bin/tools/grant-exec-perms.js.map +1 -1
- package/bin/tools/walk.js +1 -1
- package/lib/usePrepareTemplate.js +27 -15
- package/lib/usePrepareTemplate.js.map +1 -1
- package/login/kcContext/createGetKcContext.d.ts +1 -1
- package/login/kcContext/createGetKcContext.js +3 -3
- package/login/kcContext/createGetKcContext.js.map +1 -1
- package/login/kcContext/getKcContext.d.ts +3 -1
- package/login/kcContext/getKcContext.js +3 -1
- package/login/kcContext/getKcContext.js.map +1 -1
- package/login/pages/LoginOtp.js +8 -4
- package/login/pages/LoginOtp.js.map +1 -1
- package/package.json +15 -7
- package/src/account/kcContext/createGetKcContext.ts +4 -4
- package/src/account/kcContext/getKcContext.ts +3 -1
- package/src/bin/keycloakify/BuildOptions.ts +3 -1
- package/src/bin/keycloakify/generateTheme/downloadKeycloakStaticResources.ts +38 -0
- package/src/bin/keycloakify/{generateKeycloakThemeResources.ts → generateTheme/generateTheme.ts} +27 -41
- package/src/bin/keycloakify/generateTheme/index.ts +1 -0
- package/src/bin/keycloakify/keycloakify.ts +2 -3
- package/src/lib/usePrepareTemplate.ts +29 -16
- package/src/login/kcContext/createGetKcContext.ts +4 -4
- package/src/login/kcContext/getKcContext.ts +3 -1
- package/src/login/pages/LoginOtp.tsx +11 -4
- package/src/tools/headInsert.ts +5 -2
- package/tools/headInsert.d.ts +4 -1
- package/tools/headInsert.js +4 -1
- package/tools/headInsert.js.map +1 -1
- package/bin/keycloakify/generateKeycloakThemeResources.js.map +0 -1
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"usePrepareTemplate.js","sourceRoot":"","sources":["../src/lib/usePrepareTemplate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAE9C,MAAM,UAAU,kBAAkB,CAAC,MAWlC;IACG,MAAM,EAAE,4BAA4B,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC;
|
1
|
+
{"version":3,"file":"usePrepareTemplate.js","sourceRoot":"","sources":["../src/lib/usePrepareTemplate.ts"],"names":[],"mappings":"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"}
|
@@ -7,7 +7,7 @@ export declare function createGetKcContext<KcContextExtension extends {
|
|
7
7
|
}): {
|
8
8
|
getKcContext: <PageId extends ExtendKcContext<KcContextExtension>["pageId"] | undefined = undefined>(params?: {
|
9
9
|
mockPageId?: PageId | undefined;
|
10
|
-
|
10
|
+
storyPartialKcContext?: DeepPartial<Extract<ExtendKcContext<KcContextExtension>, {
|
11
11
|
pageId: PageId;
|
12
12
|
}>> | undefined;
|
13
13
|
} | undefined) => {
|
@@ -13,7 +13,7 @@ export function createGetKcContext(params) {
|
|
13
13
|
const { mockData } = params !== null && params !== void 0 ? params : {};
|
14
14
|
function getKcContext(params) {
|
15
15
|
var _a, _b;
|
16
|
-
const { mockPageId,
|
16
|
+
const { mockPageId, storyPartialKcContext } = params !== null && params !== void 0 ? params : {};
|
17
17
|
const realKcContext = getKcContextFromWindow();
|
18
18
|
if (mockPageId !== undefined && realKcContext === undefined) {
|
19
19
|
//TODO maybe trow if no mock fo custom page
|
@@ -31,10 +31,10 @@ export function createGetKcContext(params) {
|
|
31
31
|
"source": mockDataPick
|
32
32
|
});
|
33
33
|
}
|
34
|
-
if (
|
34
|
+
if (storyPartialKcContext !== undefined) {
|
35
35
|
deepAssign({
|
36
36
|
"target": out,
|
37
|
-
"source":
|
37
|
+
"source": storyPartialKcContext
|
38
38
|
});
|
39
39
|
}
|
40
40
|
return Object.keys(out).length === 0 ? undefined : out;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"createGetKcContext.js","sourceRoot":"","sources":["../../src/login/kcContext/createGetKcContext.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvE,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,8BAA8B,EAAE,MAAM,0CAA0C,CAAC;AAC1F,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AAEnF,MAAM,UAAU,kBAAkB,CAAwD,MAEzF;IACG,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,EAAE,CAAC;IAElC,SAAS,YAAY,CAAuF,MAG3G;;QAKG,MAAM,EAAE,UAAU,EAAE,
|
1
|
+
{"version":3,"file":"createGetKcContext.js","sourceRoot":"","sources":["../../src/login/kcContext/createGetKcContext.ts"],"names":[],"mappings":"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"}
|
@@ -1,6 +1,8 @@
|
|
1
1
|
import type { DeepPartial } from "../../tools/DeepPartial";
|
2
2
|
import type { ExtendKcContext } from "./getKcContextFromWindow";
|
3
|
-
/**
|
3
|
+
/** NOTE: We now recommend using createGetKcContext instead of this function to make storybook integration easier
|
4
|
+
* See: https://github.com/keycloakify/keycloakify-starter/blob/main/src/keycloak-theme/account/kcContext.ts
|
5
|
+
*/
|
4
6
|
export declare function getKcContext<KcContextExtension extends {
|
5
7
|
pageId: string;
|
6
8
|
} = never>(params?: {
|
@@ -1,5 +1,7 @@
|
|
1
1
|
import { createGetKcContext } from "./createGetKcContext";
|
2
|
-
/**
|
2
|
+
/** NOTE: We now recommend using createGetKcContext instead of this function to make storybook integration easier
|
3
|
+
* See: https://github.com/keycloakify/keycloakify-starter/blob/main/src/keycloak-theme/account/kcContext.ts
|
4
|
+
*/
|
3
5
|
export function getKcContext(params) {
|
4
6
|
const { mockPageId, mockData } = params !== null && params !== void 0 ? params : {};
|
5
7
|
const { getKcContext } = createGetKcContext({
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"getKcContext.js","sourceRoot":"","sources":["../../src/login/kcContext/getKcContext.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D
|
1
|
+
{"version":3,"file":"getKcContext.js","sourceRoot":"","sources":["../../src/login/kcContext/getKcContext.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D;;GAEG;AACH,MAAM,UAAU,YAAY,CAAwD,MAGnF;IACG,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,EAAE,CAAC;IAE9C,MAAM,EAAE,YAAY,EAAE,GAAG,kBAAkB,CAAqB;QAC5D,QAAQ;KACX,CAAC,CAAC;IAEH,MAAM,EAAE,SAAS,EAAE,GAAG,YAAY,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;IAEnD,OAAO,EAAE,SAAS,EAAE,CAAC;AACzB,CAAC"}
|
package/login/pages/LoginOtp.js
CHANGED
@@ -14,16 +14,20 @@ export default function LoginOtp(props) {
|
|
14
14
|
const { msg, msgStr } = i18n;
|
15
15
|
useEffect(() => {
|
16
16
|
let isCleanedUp = false;
|
17
|
-
headInsert({
|
17
|
+
const { prLoaded, remove } = headInsert({
|
18
18
|
"type": "javascript",
|
19
19
|
"src": pathJoin(kcContext.url.resourcesCommonPath, "node_modules/jquery/dist/jquery.min.js")
|
20
|
-
})
|
21
|
-
|
20
|
+
});
|
21
|
+
(async () => {
|
22
|
+
await prLoaded;
|
23
|
+
if (isCleanedUp) {
|
22
24
|
return;
|
25
|
+
}
|
23
26
|
evaluateInlineScript();
|
24
|
-
});
|
27
|
+
})();
|
25
28
|
return () => {
|
26
29
|
isCleanedUp = true;
|
30
|
+
remove();
|
27
31
|
};
|
28
32
|
}, []);
|
29
33
|
return (_jsx(Template, Object.assign({}, { kcContext, i18n, doUseDefaultCss, classes }, { headerNode: msg("doLogIn") }, { children: _jsxs("form", Object.assign({ id: "kc-otp-login-form", className: getClassName("kcFormClass"), action: url.loginAction, method: "post" }, { children: [otpLogin.userOtpCredentials.length > 1 && (_jsx("div", Object.assign({ className: getClassName("kcFormGroupClass") }, { children: _jsx("div", Object.assign({ className: getClassName("kcInputWrapperClass") }, { children: otpLogin.userOtpCredentials.map(otpCredential => (_jsxs("div", Object.assign({ className: getClassName("kcSelectOTPListClass") }, { children: [_jsx("input", { type: "hidden", value: "${otpCredential.id}" }), _jsxs("div", Object.assign({ className: getClassName("kcSelectOTPListItemClass") }, { children: [_jsx("span", { className: getClassName("kcAuthenticatorOtpCircleClass") }), _jsx("h2", Object.assign({ className: getClassName("kcSelectOTPItemHeadingClass") }, { children: otpCredential.userLabel }))] }))] }), otpCredential.id))) })) }))), _jsxs("div", Object.assign({ className: getClassName("kcFormGroupClass") }, { children: [_jsx("div", Object.assign({ className: getClassName("kcLabelWrapperClass") }, { children: _jsx("label", Object.assign({ htmlFor: "otp", className: getClassName("kcLabelClass") }, { children: msg("loginOtpOneTime") })) })), _jsx("div", Object.assign({ className: getClassName("kcInputWrapperClass") }, { children: _jsx("input", { id: "otp", name: "otp", autoComplete: "off", type: "text", className: getClassName("kcInputClass"), autoFocus: true }) }))] })), _jsxs("div", Object.assign({ className: getClassName("kcFormGroupClass") }, { children: [_jsx("div", Object.assign({ id: "kc-form-options", className: getClassName("kcFormOptionsClass") }, { children: _jsx("div", { className: getClassName("kcFormOptionsWrapperClass") }) })), _jsx("div", Object.assign({ id: "kc-form-buttons", className: getClassName("kcFormButtonsClass") }, { children: _jsx("input", { className: clsx(getClassName("kcButtonClass"), getClassName("kcButtonPrimaryClass"), getClassName("kcButtonBlockClass"), getClassName("kcButtonLargeClass")), name: "login", id: "kc-login", type: "submit", value: msgStr("doLogIn") }) }))] }))] })) })));
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"LoginOtp.js","sourceRoot":"","sources":["../../src/login/pages/LoginOtp.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAE9C,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAIxE,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,KAAuE;IACpG,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAEtE,MAAM,EAAE,YAAY,EAAE,GAAG,eAAe,CAAC;QACrC,eAAe;QACf,OAAO;KACV,CAAC,CAAC;IAEH,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC;IAEpC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAE7B,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,WAAW,GAAG,KAAK,CAAC;QAExB,UAAU,CAAC;
|
1
|
+
{"version":3,"file":"LoginOtp.js","sourceRoot":"","sources":["../../src/login/pages/LoginOtp.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "keycloakify",
|
3
|
-
"version": "7.
|
3
|
+
"version": "7.7.2",
|
4
4
|
"description": "Create Keycloak themes using React",
|
5
5
|
"repository": {
|
6
6
|
"type": "git",
|
@@ -78,8 +78,10 @@
|
|
78
78
|
"src/bin/keycloakify/generateFtl/index.ts",
|
79
79
|
"src/bin/keycloakify/generateFtl/pageId.ts",
|
80
80
|
"src/bin/keycloakify/generateJavaStackFiles.ts",
|
81
|
-
"src/bin/keycloakify/generateKeycloakThemeResources.ts",
|
82
81
|
"src/bin/keycloakify/generateStartKeycloakTestingContainer.ts",
|
82
|
+
"src/bin/keycloakify/generateTheme/downloadKeycloakStaticResources.ts",
|
83
|
+
"src/bin/keycloakify/generateTheme/generateTheme.ts",
|
84
|
+
"src/bin/keycloakify/generateTheme/index.ts",
|
83
85
|
"src/bin/keycloakify/index.ts",
|
84
86
|
"src/bin/keycloakify/keycloakify.ts",
|
85
87
|
"src/bin/keycloakify/parsedPackageJson.ts",
|
@@ -345,12 +347,18 @@
|
|
345
347
|
"bin/keycloakify/generateJavaStackFiles.d.ts",
|
346
348
|
"bin/keycloakify/generateJavaStackFiles.js",
|
347
349
|
"bin/keycloakify/generateJavaStackFiles.js.map",
|
348
|
-
"bin/keycloakify/generateKeycloakThemeResources.d.ts",
|
349
|
-
"bin/keycloakify/generateKeycloakThemeResources.js",
|
350
|
-
"bin/keycloakify/generateKeycloakThemeResources.js.map",
|
351
350
|
"bin/keycloakify/generateStartKeycloakTestingContainer.d.ts",
|
352
351
|
"bin/keycloakify/generateStartKeycloakTestingContainer.js",
|
353
352
|
"bin/keycloakify/generateStartKeycloakTestingContainer.js.map",
|
353
|
+
"bin/keycloakify/generateTheme/downloadKeycloakStaticResources.d.ts",
|
354
|
+
"bin/keycloakify/generateTheme/downloadKeycloakStaticResources.js",
|
355
|
+
"bin/keycloakify/generateTheme/downloadKeycloakStaticResources.js.map",
|
356
|
+
"bin/keycloakify/generateTheme/generateTheme.d.ts",
|
357
|
+
"bin/keycloakify/generateTheme/generateTheme.js",
|
358
|
+
"bin/keycloakify/generateTheme/generateTheme.js.map",
|
359
|
+
"bin/keycloakify/generateTheme/index.d.ts",
|
360
|
+
"bin/keycloakify/generateTheme/index.js",
|
361
|
+
"bin/keycloakify/generateTheme/index.js.map",
|
354
362
|
"bin/keycloakify/index.d.ts",
|
355
363
|
"bin/keycloakify/index.js",
|
356
364
|
"bin/keycloakify/index.js.map",
|
@@ -719,7 +727,7 @@
|
|
719
727
|
"@types/react": "^18.0.35",
|
720
728
|
"@types/react-dom": "^18.0.11",
|
721
729
|
"@types/yauzl": "^2.10.0",
|
722
|
-
"concurrently": "^
|
730
|
+
"concurrently": "^8.0.1",
|
723
731
|
"copyfiles": "^2.4.1",
|
724
732
|
"eslint-plugin-storybook": "^0.6.7",
|
725
733
|
"husky": "^4.3.8",
|
@@ -733,7 +741,7 @@
|
|
733
741
|
"storybook-dark-mode": "^1.1.2",
|
734
742
|
"ts-node": "^10.9.1",
|
735
743
|
"tsc-alias": "^1.8.3",
|
736
|
-
"typescript": "^
|
744
|
+
"typescript": "^4.9.1-beta",
|
737
745
|
"vitest": "^0.29.8",
|
738
746
|
"zod-to-json-schema": "^3.20.4"
|
739
747
|
},
|
@@ -17,13 +17,13 @@ export function createGetKcContext<KcContextExtension extends { pageId: string }
|
|
17
17
|
|
18
18
|
function getKcContext<PageId extends ExtendKcContext<KcContextExtension>["pageId"] | undefined = undefined>(params?: {
|
19
19
|
mockPageId?: PageId;
|
20
|
-
|
20
|
+
storyPartialKcContext?: DeepPartial<Extract<ExtendKcContext<KcContextExtension>, { pageId: PageId }>>;
|
21
21
|
}): {
|
22
22
|
kcContext: PageId extends undefined
|
23
23
|
? ExtendKcContext<KcContextExtension> | undefined
|
24
24
|
: Extract<ExtendKcContext<KcContextExtension>, { pageId: PageId }>;
|
25
25
|
} {
|
26
|
-
const { mockPageId,
|
26
|
+
const { mockPageId, storyPartialKcContext } = params ?? {};
|
27
27
|
|
28
28
|
const realKcContext = getKcContextFromWindow<KcContextExtension>();
|
29
29
|
|
@@ -52,10 +52,10 @@ export function createGetKcContext<KcContextExtension extends { pageId: string }
|
|
52
52
|
});
|
53
53
|
}
|
54
54
|
|
55
|
-
if (
|
55
|
+
if (storyPartialKcContext !== undefined) {
|
56
56
|
deepAssign({
|
57
57
|
"target": out,
|
58
|
-
"source":
|
58
|
+
"source": storyPartialKcContext
|
59
59
|
});
|
60
60
|
}
|
61
61
|
|
@@ -2,7 +2,9 @@ import type { DeepPartial } from "keycloakify/tools/DeepPartial";
|
|
2
2
|
import type { ExtendKcContext } from "./getKcContextFromWindow";
|
3
3
|
import { createGetKcContext } from "./createGetKcContext";
|
4
4
|
|
5
|
-
/**
|
5
|
+
/** NOTE: We now recommend using createGetKcContext instead of this function to make storybook integration easier
|
6
|
+
* See: https://github.com/keycloakify/keycloakify-starter/blob/main/src/keycloak-theme/account/kcContext.ts
|
7
|
+
*/
|
6
8
|
export function getKcContext<KcContextExtension extends { pageId: string } = never>(params?: {
|
7
9
|
mockPageId?: ExtendKcContext<KcContextExtension>["pageId"];
|
8
10
|
mockData?: readonly DeepPartial<ExtendKcContext<KcContextExtension>>[];
|
@@ -53,6 +53,8 @@ export namespace BuildOptions {
|
|
53
53
|
}
|
54
54
|
}
|
55
55
|
|
56
|
+
export const defaultKeycloakVersionDefaultAssets = "11.0.3";
|
57
|
+
|
56
58
|
export function readBuildOptions(params: { projectDirPath: string; isExternalAssetsCliParamProvided: boolean; isSilent: boolean }): BuildOptions {
|
57
59
|
const { projectDirPath, isExternalAssetsCliParamProvided, isSilent } = params;
|
58
60
|
|
@@ -144,7 +146,7 @@ export function readBuildOptions(params: { projectDirPath: string; isExternalAss
|
|
144
146
|
extraAccountPages,
|
145
147
|
extraThemeProperties,
|
146
148
|
isSilent,
|
147
|
-
"keycloakVersionDefaultAssets": keycloakVersionDefaultAssets ??
|
149
|
+
"keycloakVersionDefaultAssets": keycloakVersionDefaultAssets ?? defaultKeycloakVersionDefaultAssets,
|
148
150
|
"reactAppBuildDirPath": (() => {
|
149
151
|
let { reactAppBuildDirPath = undefined } = parsedPackageJson.keycloakify ?? {};
|
150
152
|
|
@@ -0,0 +1,38 @@
|
|
1
|
+
import { transformCodebase } from "../../tools/transformCodebase";
|
2
|
+
import * as fs from "fs";
|
3
|
+
import { join as pathJoin, relative as pathRelative } from "path";
|
4
|
+
import type { ThemeType } from "../generateFtl";
|
5
|
+
import { downloadBuiltinKeycloakTheme } from "../../download-builtin-keycloak-theme";
|
6
|
+
import { mockTestingResourcesCommonPath, mockTestingResourcesPath, mockTestingSubDirOfPublicDirBasename } from "../../mockTestingResourcesPath";
|
7
|
+
|
8
|
+
export async function downloadKeycloakStaticResources(
|
9
|
+
// prettier-ignore
|
10
|
+
params: {
|
11
|
+
themeType: ThemeType;
|
12
|
+
themeDirPath: string;
|
13
|
+
isSilent: boolean;
|
14
|
+
keycloakVersion: string;
|
15
|
+
}
|
16
|
+
) {
|
17
|
+
const { themeType, isSilent, themeDirPath, keycloakVersion } = params;
|
18
|
+
|
19
|
+
const tmpDirPath = pathJoin(themeDirPath, "..", "tmp_suLeKsxId");
|
20
|
+
|
21
|
+
await downloadBuiltinKeycloakTheme({
|
22
|
+
keycloakVersion,
|
23
|
+
"destDirPath": tmpDirPath,
|
24
|
+
isSilent
|
25
|
+
});
|
26
|
+
|
27
|
+
transformCodebase({
|
28
|
+
"srcDirPath": pathJoin(tmpDirPath, "keycloak", themeType, "resources"),
|
29
|
+
"destDirPath": pathJoin(themeDirPath, pathRelative(mockTestingSubDirOfPublicDirBasename, mockTestingResourcesPath))
|
30
|
+
});
|
31
|
+
|
32
|
+
transformCodebase({
|
33
|
+
"srcDirPath": pathJoin(tmpDirPath, "keycloak", "common", "resources"),
|
34
|
+
"destDirPath": pathJoin(themeDirPath, pathRelative(mockTestingSubDirOfPublicDirBasename, mockTestingResourcesCommonPath))
|
35
|
+
});
|
36
|
+
|
37
|
+
fs.rmSync(tmpDirPath, { "recursive": true, "force": true });
|
38
|
+
}
|
package/src/bin/keycloakify/{generateKeycloakThemeResources.ts → generateTheme/generateTheme.ts}
RENAMED
@@ -1,14 +1,14 @@
|
|
1
|
-
import { transformCodebase } from "
|
1
|
+
import { transformCodebase } from "../../tools/transformCodebase";
|
2
2
|
import * as fs from "fs";
|
3
|
-
import { join as pathJoin
|
4
|
-
import { replaceImportsFromStaticInJsCode } from "
|
5
|
-
import { replaceImportsInCssCode } from "
|
6
|
-
import { generateFtlFilesCodeFactory, loginThemePageIds, accountThemePageIds, themeTypes, type ThemeType } from "
|
7
|
-
import {
|
8
|
-
import {
|
9
|
-
import {
|
10
|
-
import type { BuildOptions } from "./BuildOptions";
|
3
|
+
import { join as pathJoin } from "path";
|
4
|
+
import { replaceImportsFromStaticInJsCode } from "../replacers/replaceImportsFromStaticInJsCode";
|
5
|
+
import { replaceImportsInCssCode } from "../replacers/replaceImportsInCssCode";
|
6
|
+
import { generateFtlFilesCodeFactory, loginThemePageIds, accountThemePageIds, themeTypes, type ThemeType } from "../generateFtl";
|
7
|
+
import { mockTestingSubDirOfPublicDirBasename } from "../../mockTestingResourcesPath";
|
8
|
+
import { isInside } from "../../tools/isInside";
|
9
|
+
import type { BuildOptions } from "../BuildOptions";
|
11
10
|
import { assert } from "tsafe/assert";
|
11
|
+
import { downloadKeycloakStaticResources } from "./downloadKeycloakStaticResources";
|
12
12
|
|
13
13
|
export type BuildOptionsLike = BuildOptionsLike.Standalone | BuildOptionsLike.ExternalAssets;
|
14
14
|
|
@@ -21,6 +21,7 @@ export namespace BuildOptionsLike {
|
|
21
21
|
isSilent: boolean;
|
22
22
|
customUserAttributes: string[];
|
23
23
|
themeVersion: string;
|
24
|
+
keycloakVersionDefaultAssets: string;
|
24
25
|
};
|
25
26
|
|
26
27
|
export type Standalone = Common & {
|
@@ -49,15 +50,14 @@ export namespace BuildOptionsLike {
|
|
49
50
|
|
50
51
|
assert<BuildOptions extends BuildOptionsLike ? true : false>();
|
51
52
|
|
52
|
-
export async function
|
53
|
+
export async function generateTheme(params: {
|
53
54
|
reactAppBuildDirPath: string;
|
54
55
|
keycloakThemeBuildingDirPath: string;
|
55
56
|
emailThemeSrcDirPath: string | undefined;
|
56
|
-
keycloakVersion: string;
|
57
57
|
buildOptions: BuildOptionsLike;
|
58
58
|
keycloakifyVersion: string;
|
59
59
|
}): Promise<{ doBundlesEmailTemplate: boolean }> {
|
60
|
-
const { reactAppBuildDirPath, keycloakThemeBuildingDirPath, emailThemeSrcDirPath,
|
60
|
+
const { reactAppBuildDirPath, keycloakThemeBuildingDirPath, emailThemeSrcDirPath, buildOptions, keycloakifyVersion } = params;
|
61
61
|
|
62
62
|
const getThemeDirPath = (themeType: ThemeType | "email") =>
|
63
63
|
pathJoin(keycloakThemeBuildingDirPath, "src", "main", "resources", "theme", buildOptions.themeName, themeType);
|
@@ -172,47 +172,33 @@ export async function generateKeycloakThemeResources(params: {
|
|
172
172
|
fs.writeFileSync(pathJoin(themeDirPath, pageId), Buffer.from(ftlCode, "utf8"));
|
173
173
|
});
|
174
174
|
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
isSilent: buildOptions.isSilent
|
182
|
-
});
|
183
|
-
|
184
|
-
const themeResourcesDirPath = pathJoin(themeDirPath, "resources");
|
185
|
-
|
186
|
-
transformCodebase({
|
187
|
-
"srcDirPath": pathJoin(tmpDirPath, "keycloak", themeType, "resources"),
|
188
|
-
"destDirPath": themeResourcesDirPath
|
175
|
+
const downloadKeycloakStaticResources_configured = async (themeDirPath: string) =>
|
176
|
+
await downloadKeycloakStaticResources({
|
177
|
+
"isSilent": buildOptions.isSilent,
|
178
|
+
"keycloakVersion": buildOptions.keycloakVersionDefaultAssets,
|
179
|
+
themeDirPath,
|
180
|
+
themeType
|
189
181
|
});
|
190
182
|
|
191
|
-
|
183
|
+
await downloadKeycloakStaticResources_configured(themeDirPath);
|
192
184
|
|
193
|
-
|
194
|
-
|
195
|
-
"destDirPath": pathJoin(themeResourcesDirPath, pathBasename(mockTestingResourcesCommonPath))
|
196
|
-
});
|
197
|
-
|
198
|
-
transformCodebase({
|
199
|
-
"srcDirPath": themeResourcesDirPath,
|
200
|
-
"destDirPath": pathJoin(reactAppPublicDirPath, mockTestingResourcesPath)
|
201
|
-
});
|
185
|
+
{
|
186
|
+
const keycloakResourcesWithinPublicDirPath = pathJoin(reactAppBuildDirPath, "..", "public", mockTestingSubDirOfPublicDirBasename);
|
202
187
|
|
203
|
-
|
188
|
+
await downloadKeycloakStaticResources_configured(keycloakResourcesWithinPublicDirPath);
|
204
189
|
|
205
190
|
fs.writeFileSync(
|
206
191
|
pathJoin(keycloakResourcesWithinPublicDirPath, "README.txt"),
|
207
192
|
Buffer.from(
|
208
|
-
|
209
|
-
|
210
|
-
|
193
|
+
// prettier-ignore
|
194
|
+
[
|
195
|
+
"This is just a test folder that helps develop",
|
196
|
+
"the login and register page without having to run a Keycloak container"
|
197
|
+
].join(" ")
|
211
198
|
)
|
212
199
|
);
|
213
200
|
|
214
201
|
fs.writeFileSync(pathJoin(keycloakResourcesWithinPublicDirPath, ".gitignore"), Buffer.from("*", "utf8"));
|
215
|
-
fs.rmSync(tmpDirPath, { recursive: true, force: true });
|
216
202
|
}
|
217
203
|
|
218
204
|
fs.writeFileSync(
|
@@ -0,0 +1 @@
|
|
1
|
+
export * from "./generateTheme";
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import {
|
1
|
+
import { generateTheme } from "./generateTheme";
|
2
2
|
import { generateJavaStackFiles } from "./generateJavaStackFiles";
|
3
3
|
import { join as pathJoin, relative as pathRelative, basename as pathBasename, sep as pathSep } from "path";
|
4
4
|
import * as child_process from "child_process";
|
@@ -26,7 +26,7 @@ export async function main() {
|
|
26
26
|
"isSilent": isSilent
|
27
27
|
});
|
28
28
|
|
29
|
-
const { doBundlesEmailTemplate } = await
|
29
|
+
const { doBundlesEmailTemplate } = await generateTheme({
|
30
30
|
keycloakThemeBuildingDirPath: buildOptions.keycloakifyBuildDirPath,
|
31
31
|
"emailThemeSrcDirPath": (() => {
|
32
32
|
const { emailThemeSrcDirPath } = getEmailThemeSrcDirPath({ projectDirPath });
|
@@ -39,7 +39,6 @@ export async function main() {
|
|
39
39
|
})(),
|
40
40
|
"reactAppBuildDirPath": buildOptions.reactAppBuildDirPath,
|
41
41
|
buildOptions,
|
42
|
-
"keycloakVersion": buildOptions.keycloakVersionDefaultAssets,
|
43
42
|
"keycloakifyVersion": (() => {
|
44
43
|
const version = JSON.parse(fs.readFileSync(pathJoin(getProjectRoot(), "package.json")).toString("utf8"))["version"];
|
45
44
|
|
@@ -15,7 +15,7 @@ export function usePrepareTemplate(params: {
|
|
15
15
|
htmlClassName: string | undefined;
|
16
16
|
bodyClassName: string | undefined;
|
17
17
|
}) {
|
18
|
-
const { doFetchDefaultThemeResources, stylesCommon, styles, url, scripts, htmlClassName, bodyClassName } = params;
|
18
|
+
const { doFetchDefaultThemeResources, stylesCommon = [], styles = [], url, scripts = [], htmlClassName, bodyClassName } = params;
|
19
19
|
|
20
20
|
const [isReady, setReady] = useReducer(() => true, !doFetchDefaultThemeResources);
|
21
21
|
|
@@ -26,36 +26,49 @@ export function usePrepareTemplate(params: {
|
|
26
26
|
|
27
27
|
let isUnmounted = false;
|
28
28
|
|
29
|
-
|
29
|
+
const removeArray: (() => void)[] = [];
|
30
|
+
|
31
|
+
(async () => {
|
32
|
+
const prLoadedArray: Promise<void>[] = [];
|
33
|
+
|
30
34
|
[
|
31
|
-
...
|
32
|
-
...
|
35
|
+
...stylesCommon.map(relativePath => pathJoin(url.resourcesCommonPath, relativePath)),
|
36
|
+
...styles.map(relativePath => pathJoin(url.resourcesPath, relativePath))
|
33
37
|
]
|
34
38
|
.reverse()
|
35
|
-
.
|
36
|
-
headInsert({
|
39
|
+
.forEach(href => {
|
40
|
+
const { prLoaded, remove } = headInsert({
|
37
41
|
"type": "css",
|
38
|
-
|
39
|
-
|
40
|
-
})
|
41
|
-
|
42
|
-
|
42
|
+
"position": "prepend",
|
43
|
+
href
|
44
|
+
});
|
45
|
+
|
46
|
+
removeArray.push(remove);
|
47
|
+
|
48
|
+
prLoadedArray.push(prLoaded);
|
49
|
+
});
|
50
|
+
|
51
|
+
await Promise.all(prLoadedArray);
|
52
|
+
|
43
53
|
if (isUnmounted) {
|
44
54
|
return;
|
45
55
|
}
|
46
56
|
|
47
57
|
setReady();
|
48
|
-
});
|
58
|
+
})();
|
49
59
|
|
50
|
-
|
51
|
-
headInsert({
|
60
|
+
scripts.forEach(relativePath => {
|
61
|
+
const { remove } = headInsert({
|
52
62
|
"type": "javascript",
|
53
63
|
"src": pathJoin(url.resourcesPath, relativePath)
|
54
|
-
})
|
55
|
-
|
64
|
+
});
|
65
|
+
|
66
|
+
removeArray.push(remove);
|
67
|
+
});
|
56
68
|
|
57
69
|
return () => {
|
58
70
|
isUnmounted = true;
|
71
|
+
removeArray.forEach(remove => remove());
|
59
72
|
};
|
60
73
|
}, []);
|
61
74
|
|
@@ -20,13 +20,13 @@ export function createGetKcContext<KcContextExtension extends { pageId: string }
|
|
20
20
|
|
21
21
|
function getKcContext<PageId extends ExtendKcContext<KcContextExtension>["pageId"] | undefined = undefined>(params?: {
|
22
22
|
mockPageId?: PageId;
|
23
|
-
|
23
|
+
storyPartialKcContext?: DeepPartial<Extract<ExtendKcContext<KcContextExtension>, { pageId: PageId }>>;
|
24
24
|
}): {
|
25
25
|
kcContext: PageId extends undefined
|
26
26
|
? ExtendKcContext<KcContextExtension> | undefined
|
27
27
|
: Extract<ExtendKcContext<KcContextExtension>, { pageId: PageId }>;
|
28
28
|
} {
|
29
|
-
const { mockPageId,
|
29
|
+
const { mockPageId, storyPartialKcContext } = params ?? {};
|
30
30
|
|
31
31
|
const realKcContext = getKcContextFromWindow<KcContextExtension>();
|
32
32
|
|
@@ -55,10 +55,10 @@ export function createGetKcContext<KcContextExtension extends { pageId: string }
|
|
55
55
|
});
|
56
56
|
}
|
57
57
|
|
58
|
-
if (
|
58
|
+
if (storyPartialKcContext !== undefined) {
|
59
59
|
deepAssign({
|
60
60
|
"target": out,
|
61
|
-
"source":
|
61
|
+
"source": storyPartialKcContext
|
62
62
|
});
|
63
63
|
}
|
64
64
|
|
@@ -2,7 +2,9 @@ import type { DeepPartial } from "keycloakify/tools/DeepPartial";
|
|
2
2
|
import type { ExtendKcContext } from "./getKcContextFromWindow";
|
3
3
|
import { createGetKcContext } from "./createGetKcContext";
|
4
4
|
|
5
|
-
/**
|
5
|
+
/** NOTE: We now recommend using createGetKcContext instead of this function to make storybook integration easier
|
6
|
+
* See: https://github.com/keycloakify/keycloakify-starter/blob/main/src/keycloak-theme/account/kcContext.ts
|
7
|
+
*/
|
6
8
|
export function getKcContext<KcContextExtension extends { pageId: string } = never>(params?: {
|
7
9
|
mockPageId?: ExtendKcContext<KcContextExtension>["pageId"];
|
8
10
|
mockData?: readonly DeepPartial<ExtendKcContext<KcContextExtension>>[];
|
@@ -22,17 +22,24 @@ export default function LoginOtp(props: PageProps<Extract<KcContext, { pageId: "
|
|
22
22
|
useEffect(() => {
|
23
23
|
let isCleanedUp = false;
|
24
24
|
|
25
|
-
headInsert({
|
25
|
+
const { prLoaded, remove } = headInsert({
|
26
26
|
"type": "javascript",
|
27
27
|
"src": pathJoin(kcContext.url.resourcesCommonPath, "node_modules/jquery/dist/jquery.min.js")
|
28
|
-
})
|
29
|
-
|
28
|
+
});
|
29
|
+
|
30
|
+
(async () => {
|
31
|
+
await prLoaded;
|
32
|
+
|
33
|
+
if (isCleanedUp) {
|
34
|
+
return;
|
35
|
+
}
|
30
36
|
|
31
37
|
evaluateInlineScript();
|
32
|
-
});
|
38
|
+
})();
|
33
39
|
|
34
40
|
return () => {
|
35
41
|
isCleanedUp = true;
|
42
|
+
remove();
|
36
43
|
};
|
37
44
|
}, []);
|
38
45
|
|
package/src/tools/headInsert.ts
CHANGED
@@ -12,7 +12,7 @@ export function headInsert(
|
|
12
12
|
type: "javascript";
|
13
13
|
src: string;
|
14
14
|
}
|
15
|
-
) {
|
15
|
+
): { remove: () => void; prLoaded: Promise<void> } {
|
16
16
|
const htmlElement = document.createElement(
|
17
17
|
(() => {
|
18
18
|
switch (params.type) {
|
@@ -66,5 +66,8 @@ export function headInsert(
|
|
66
66
|
})()
|
67
67
|
](htmlElement);
|
68
68
|
|
69
|
-
return
|
69
|
+
return {
|
70
|
+
"prLoaded": dLoaded.pr,
|
71
|
+
"remove": () => htmlElement.remove()
|
72
|
+
};
|
70
73
|
}
|