keycloakify 10.0.0-rc.22 → 10.0.0-rc.24
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.d.ts +1 -1
- package/PUBLIC_URL.js +1 -1
- package/PUBLIC_URL.js.map +1 -1
- package/account/Fallback.js.map +1 -1
- package/account/Template.js +3 -3
- package/account/Template.js.map +1 -1
- package/account/i18n/baseMessages/index.js.map +1 -1
- package/account/i18n/i18n.js.map +1 -1
- package/account/index.d.ts +2 -2
- package/account/index.js +1 -2
- package/account/index.js.map +1 -1
- package/account/kcContext/KcContext.d.ts +12 -0
- package/account/kcContext/KcContext.js.map +1 -1
- package/account/kcContext/getKcContextMock.d.ts +24 -0
- package/account/kcContext/getKcContextMock.js +28 -0
- package/account/kcContext/getKcContextMock.js.map +1 -0
- package/account/kcContext/index.d.ts +2 -1
- package/account/kcContext/index.js +1 -1
- package/account/kcContext/index.js.map +1 -1
- package/account/kcContext/kcContextMocks.js +23 -91
- package/account/kcContext/kcContextMocks.js.map +1 -1
- package/account/pages/Account.js +1 -1
- package/account/pages/Account.js.map +1 -1
- package/account/pages/Applications.js +2 -2
- package/account/pages/Applications.js.map +1 -1
- package/account/pages/FederatedIdentity.js +1 -1
- package/account/pages/FederatedIdentity.js.map +1 -1
- package/account/pages/Log.js +1 -1
- package/account/pages/Log.js.map +1 -1
- package/account/pages/Password.js +6 -4
- package/account/pages/Password.js.map +1 -1
- package/account/pages/Sessions.js +1 -1
- package/account/pages/Sessions.js.map +1 -1
- package/account/pages/Totp.js +1 -1
- package/account/pages/Totp.js.map +1 -1
- package/bin/main.js +174 -162
- package/lib/BASE_URL.js.map +1 -1
- package/login/Fallback.js.map +1 -1
- package/login/Template.js +7 -7
- package/login/Template.js.map +1 -1
- package/login/UserProfileFormFields.js +24 -68
- package/login/UserProfileFormFields.js.map +1 -1
- package/login/i18n/baseMessages/index.js.map +1 -1
- package/login/i18n/i18n.d.ts +1 -1
- package/login/i18n/i18n.js +1 -1
- package/login/i18n/i18n.js.map +1 -1
- package/login/index.d.ts +2 -3
- package/login/index.js +1 -2
- package/login/index.js.map +1 -1
- package/login/kcContext/KcContext.d.ts +23 -13
- package/login/kcContext/KcContext.js.map +1 -1
- package/login/kcContext/getKcContextMock.d.ts +24 -0
- package/login/kcContext/getKcContextMock.js +28 -0
- package/login/kcContext/getKcContextMock.js.map +1 -0
- package/login/kcContext/index.d.ts +2 -1
- package/login/kcContext/index.js +1 -1
- package/login/kcContext/index.js.map +1 -1
- package/login/kcContext/kcContextMocks.js +29 -103
- package/login/kcContext/kcContextMocks.js.map +1 -1
- package/login/lib/useDownloadTerms.js +8 -14
- package/login/lib/useDownloadTerms.js.map +1 -1
- package/login/lib/useGetClassName.js +1 -1
- package/login/lib/useGetClassName.js.map +1 -1
- package/login/lib/useUserProfileForm.d.ts +9 -1
- package/login/lib/useUserProfileForm.js +94 -15
- package/login/lib/useUserProfileForm.js.map +1 -1
- package/login/pages/Code.js +1 -1
- package/login/pages/Code.js.map +1 -1
- package/login/pages/DeleteAccountConfirm.js +2 -2
- package/login/pages/DeleteAccountConfirm.js.map +1 -1
- package/login/pages/DeleteCredential.js +1 -1
- package/login/pages/DeleteCredential.js.map +1 -1
- package/login/pages/Error.js +1 -1
- package/login/pages/Error.js.map +1 -1
- package/login/pages/FrontchannelLogout.js +1 -1
- package/login/pages/FrontchannelLogout.js.map +1 -1
- package/login/pages/IdpReviewUserProfile.js +1 -1
- package/login/pages/IdpReviewUserProfile.js.map +1 -1
- package/login/pages/Info.js +5 -5
- package/login/pages/Info.js.map +1 -1
- package/login/pages/Login.js +4 -4
- package/login/pages/Login.js.map +1 -1
- package/login/pages/LoginConfigTotp.js +2 -2
- package/login/pages/LoginConfigTotp.js.map +1 -1
- package/login/pages/LoginIdpLinkConfirm.js +1 -1
- package/login/pages/LoginIdpLinkConfirm.js.map +1 -1
- package/login/pages/LoginIdpLinkEmail.js +1 -1
- package/login/pages/LoginIdpLinkEmail.js.map +1 -1
- package/login/pages/LoginOauth2DeviceVerifyUserCode.js +1 -1
- package/login/pages/LoginOauth2DeviceVerifyUserCode.js.map +1 -1
- package/login/pages/LoginOauthGrant.js +2 -2
- package/login/pages/LoginOauthGrant.js.map +1 -1
- package/login/pages/LoginOtp.js +1 -1
- package/login/pages/LoginOtp.js.map +1 -1
- package/login/pages/LoginPageExpired.js +1 -1
- package/login/pages/LoginPageExpired.js.map +1 -1
- package/login/pages/LoginPassword.js +3 -3
- package/login/pages/LoginPassword.js.map +1 -1
- package/login/pages/LoginRecoveryAuthnCodeConfig.js +10 -10
- package/login/pages/LoginRecoveryAuthnCodeConfig.js.map +1 -1
- package/login/pages/LoginRecoveryAuthnCodeInput.js +1 -1
- package/login/pages/LoginRecoveryAuthnCodeInput.js.map +1 -1
- package/login/pages/LoginResetOtp.js +1 -1
- package/login/pages/LoginResetOtp.js.map +1 -1
- package/login/pages/LoginResetPassword.js +2 -2
- package/login/pages/LoginResetPassword.js.map +1 -1
- package/login/pages/LoginUpdatePassword.js +3 -3
- package/login/pages/LoginUpdatePassword.js.map +1 -1
- package/login/pages/LoginUpdateProfile.js +4 -2
- package/login/pages/LoginUpdateProfile.js.map +1 -1
- package/login/pages/LoginUsername.js +3 -3
- package/login/pages/LoginUsername.js.map +1 -1
- package/login/pages/LoginVerifyEmail.js +1 -1
- package/login/pages/LoginVerifyEmail.js.map +1 -1
- package/login/pages/LoginX509Info.js +1 -1
- package/login/pages/LoginX509Info.js.map +1 -1
- package/login/pages/LogoutConfirm.js +1 -1
- package/login/pages/LogoutConfirm.js.map +1 -1
- package/login/pages/Register.js +8 -4
- package/login/pages/Register.js.map +1 -1
- package/login/pages/SamlPostForm.js +1 -1
- package/login/pages/SamlPostForm.js.map +1 -1
- package/login/pages/SelectAuthenticator.js +2 -2
- package/login/pages/SelectAuthenticator.js.map +1 -1
- package/login/pages/Terms.js +1 -1
- package/login/pages/Terms.js.map +1 -1
- package/login/pages/UpdateEmail.js +5 -3
- package/login/pages/UpdateEmail.js.map +1 -1
- package/login/pages/WebauthnAuthenticate.js +8 -8
- package/login/pages/WebauthnAuthenticate.js.map +1 -1
- package/login/pages/WebauthnError.js +2 -2
- package/login/pages/WebauthnError.js.map +1 -1
- package/login/pages/WebauthnRegister.js +5 -5
- package/login/pages/WebauthnRegister.js.map +1 -1
- package/package.json +26 -38
- package/src/PUBLIC_URL.ts +1 -1
- package/src/account/Template.tsx +2 -3
- package/src/account/index.ts +2 -2
- package/src/account/kcContext/KcContext.ts +19 -1
- package/src/account/kcContext/getKcContextMock.ts +80 -0
- package/src/account/kcContext/index.ts +2 -1
- package/src/account/kcContext/kcContextMocks.ts +26 -91
- package/src/bin/copy-keycloak-resources-to-public.ts +1 -4
- package/src/bin/keycloakify/generateFtl/ftl_object_to_js_code_declaring_an_object.ftl +19 -11
- package/src/bin/start-keycloak/start-keycloak.ts +18 -5
- package/src/bin/tools/getNpmWorkspaceRootDirPath.ts +25 -25
- package/src/login/Template.tsx +4 -5
- package/src/login/UserProfileFormFields.tsx +28 -80
- package/src/login/i18n/i18n.tsx +3 -3
- package/src/login/index.ts +6 -3
- package/src/login/kcContext/KcContext.ts +43 -31
- package/src/login/kcContext/getKcContextMock.ts +80 -0
- package/src/login/kcContext/index.ts +7 -1
- package/src/login/kcContext/kcContextMocks.ts +92 -165
- package/src/login/lib/useDownloadTerms.ts +10 -24
- package/src/login/lib/useGetClassName.ts +1 -1
- package/src/login/lib/useUserProfileForm.tsx +117 -13
- package/src/login/pages/LoginConfigTotp.tsx +1 -1
- package/src/login/pages/LoginRecoveryAuthnCodeConfig.tsx +7 -8
- package/src/login/pages/WebauthnAuthenticate.tsx +2 -3
- package/src/login/pages/WebauthnRegister.tsx +2 -3
- package/src/tools/ExtractAfterStartingWith.ts +4 -0
- package/src/tools/StatefulObservable/hooks/useRerenderOnChange.ts +4 -4
- package/src/tools/ValueOf.ts +2 -0
- package/src/tools/deepAssign.ts +51 -20
- package/src/tools/structuredCloneButFunctions.ts +24 -0
- package/src/tools/useInsertLinkTags.ts +78 -87
- package/src/tools/useInsertScriptTags.ts +69 -78
- package/src/tools/useOnFirstMount.ts +18 -0
- package/tools/Array.prototype.every.js.map +1 -1
- package/tools/ExtractAfterStartingWith.d.ts +1 -0
- package/tools/ExtractAfterStartingWith.js +2 -0
- package/tools/ExtractAfterStartingWith.js.map +1 -0
- package/tools/HTMLElement.prototype.prepend.js.map +1 -1
- package/tools/StatefulObservable/StatefulObservable.js.map +1 -1
- package/tools/StatefulObservable/hooks/useRerenderOnChange.d.ts +1 -1
- package/tools/StatefulObservable/hooks/useRerenderOnChange.js +4 -4
- package/tools/StatefulObservable/hooks/useRerenderOnChange.js.map +1 -1
- package/tools/ValueOf.d.ts +2 -0
- package/tools/ValueOf.js +2 -0
- package/tools/ValueOf.js.map +1 -0
- package/tools/clsx.js.map +1 -1
- package/tools/deepAssign.d.ts +1 -0
- package/tools/deepAssign.js +39 -16
- package/tools/deepAssign.js.map +1 -1
- package/tools/formatNumber.js.map +1 -1
- package/tools/structuredCloneButFunctions.d.ts +7 -0
- package/tools/structuredCloneButFunctions.js +19 -0
- package/tools/structuredCloneButFunctions.js.map +1 -0
- package/tools/useInsertLinkTags.d.ts +11 -6
- package/tools/useInsertLinkTags.js +53 -53
- package/tools/useInsertLinkTags.js.map +1 -1
- package/tools/useInsertScriptTags.d.ts +15 -6
- package/tools/useInsertScriptTags.js +56 -64
- package/tools/useInsertScriptTags.js.map +1 -1
- package/tools/useOnFirstMount.d.ts +2 -0
- package/tools/useOnFirstMount.js +15 -0
- package/tools/useOnFirstMount.js.map +1 -0
- package/tools/useSetClassName.js.map +1 -1
- package/vite-plugin/index.js +66 -64
- package/account/kcContext/createGetKcContext.d.ts +0 -19
- package/account/kcContext/createGetKcContext.js +0 -78
- package/account/kcContext/createGetKcContext.js.map +0 -1
- package/account/kcContext/getKcContext.d.ts +0 -13
- package/account/kcContext/getKcContext.js +0 -13
- package/account/kcContext/getKcContext.js.map +0 -1
- package/account/kcContext/getKcContextFromWindow.d.ts +0 -10
- package/account/kcContext/getKcContextFromWindow.js +0 -5
- package/account/kcContext/getKcContextFromWindow.js.map +0 -1
- package/login/kcContext/createGetKcContext.d.ts +0 -19
- package/login/kcContext/createGetKcContext.js +0 -117
- package/login/kcContext/createGetKcContext.js.map +0 -1
- package/login/kcContext/getKcContext.d.ts +0 -13
- package/login/kcContext/getKcContext.js +0 -13
- package/login/kcContext/getKcContext.js.map +0 -1
- package/login/kcContext/getKcContextFromWindow.d.ts +0 -10
- package/login/kcContext/getKcContextFromWindow.js +0 -5
- package/login/kcContext/getKcContextFromWindow.js.map +0 -1
- package/src/account/kcContext/createGetKcContext.ts +0 -134
- package/src/account/kcContext/getKcContext.ts +0 -23
- package/src/account/kcContext/getKcContextFromWindow.ts +0 -15
- package/src/login/kcContext/createGetKcContext.ts +0 -206
- package/src/login/kcContext/getKcContext.ts +0 -23
- package/src/login/kcContext/getKcContextFromWindow.ts +0 -15
- package/src/tools/AndByDiscriminatingKey.ts +0 -31
- package/src/tools/deepClone.ts +0 -19
- package/src/tools/memoize.ts +0 -55
- package/tools/AndByDiscriminatingKey.d.ts +0 -5
- package/tools/AndByDiscriminatingKey.js +0 -2
- package/tools/AndByDiscriminatingKey.js.map +0 -1
- package/tools/deepClone.d.ts +0 -2
- package/tools/deepClone.js +0 -14
- package/tools/deepClone.js.map +0 -1
- package/tools/memoize.d.ts +0 -7
- package/tools/memoize.js +0 -38
- package/tools/memoize.js.map +0 -1
@@ -1,134 +0,0 @@
|
|
1
|
-
import type { DeepPartial } from "keycloakify/tools/DeepPartial";
|
2
|
-
import { deepAssign } from "keycloakify/tools/deepAssign";
|
3
|
-
import { isStorybook } from "keycloakify/lib/isStorybook";
|
4
|
-
import type { ExtendKcContext } from "./getKcContextFromWindow";
|
5
|
-
import { getKcContextFromWindow } from "./getKcContextFromWindow";
|
6
|
-
import { symToStr } from "tsafe/symToStr";
|
7
|
-
import {
|
8
|
-
kcContextMocks,
|
9
|
-
kcContextCommonMock
|
10
|
-
} from "keycloakify/account/kcContext/kcContextMocks";
|
11
|
-
|
12
|
-
export function createGetKcContext<
|
13
|
-
KcContextExtension extends { pageId: string } = never
|
14
|
-
>(params?: {
|
15
|
-
mockData?: readonly DeepPartial<ExtendKcContext<KcContextExtension>>[];
|
16
|
-
mockProperties?: Record<string, string>;
|
17
|
-
}) {
|
18
|
-
const { mockData, mockProperties } = params ?? {};
|
19
|
-
|
20
|
-
function getKcContext<
|
21
|
-
PageId extends
|
22
|
-
| ExtendKcContext<KcContextExtension>["pageId"]
|
23
|
-
| undefined = undefined
|
24
|
-
>(params?: {
|
25
|
-
mockPageId?: PageId;
|
26
|
-
storyPartialKcContext?: DeepPartial<
|
27
|
-
Extract<ExtendKcContext<KcContextExtension>, { pageId: PageId }>
|
28
|
-
>;
|
29
|
-
}): {
|
30
|
-
kcContext: PageId extends undefined
|
31
|
-
? ExtendKcContext<KcContextExtension> | undefined
|
32
|
-
: Extract<ExtendKcContext<KcContextExtension>, { pageId: PageId }>;
|
33
|
-
} {
|
34
|
-
const { mockPageId, storyPartialKcContext } = params ?? {};
|
35
|
-
|
36
|
-
const realKcContext = getKcContextFromWindow<KcContextExtension>();
|
37
|
-
|
38
|
-
if (mockPageId !== undefined && realKcContext === undefined) {
|
39
|
-
//TODO maybe trow if no mock fo custom page
|
40
|
-
|
41
|
-
warn_that_mock_is_enbaled: {
|
42
|
-
if (isStorybook) {
|
43
|
-
break warn_that_mock_is_enbaled;
|
44
|
-
}
|
45
|
-
|
46
|
-
console.log(
|
47
|
-
`%cKeycloakify: ${symToStr({
|
48
|
-
mockPageId
|
49
|
-
})} set to ${mockPageId}.`,
|
50
|
-
"background: red; color: yellow; font-size: medium"
|
51
|
-
);
|
52
|
-
}
|
53
|
-
|
54
|
-
const kcContextDefaultMock = kcContextMocks.find(
|
55
|
-
({ pageId }) => pageId === mockPageId
|
56
|
-
);
|
57
|
-
|
58
|
-
const partialKcContextCustomMock = (() => {
|
59
|
-
const out: DeepPartial<ExtendKcContext<KcContextExtension>> = {};
|
60
|
-
|
61
|
-
const mockDataPick = mockData?.find(
|
62
|
-
({ pageId }) => pageId === mockPageId
|
63
|
-
);
|
64
|
-
|
65
|
-
if (mockDataPick !== undefined) {
|
66
|
-
deepAssign({
|
67
|
-
target: out,
|
68
|
-
source: mockDataPick
|
69
|
-
});
|
70
|
-
}
|
71
|
-
|
72
|
-
if (storyPartialKcContext !== undefined) {
|
73
|
-
deepAssign({
|
74
|
-
target: out,
|
75
|
-
source: storyPartialKcContext
|
76
|
-
});
|
77
|
-
}
|
78
|
-
|
79
|
-
return Object.keys(out).length === 0 ? undefined : out;
|
80
|
-
})();
|
81
|
-
|
82
|
-
if (
|
83
|
-
kcContextDefaultMock === undefined &&
|
84
|
-
partialKcContextCustomMock === undefined
|
85
|
-
) {
|
86
|
-
console.warn(
|
87
|
-
[
|
88
|
-
`WARNING: You declared the non build in page ${mockPageId} but you didn't `,
|
89
|
-
`provide mock data needed to debug the page outside of Keycloak as you are trying to do now.`,
|
90
|
-
`Please check the documentation of the getKcContext function`
|
91
|
-
].join("\n")
|
92
|
-
);
|
93
|
-
}
|
94
|
-
|
95
|
-
const kcContext: any = {};
|
96
|
-
|
97
|
-
deepAssign({
|
98
|
-
target: kcContext,
|
99
|
-
source:
|
100
|
-
kcContextDefaultMock !== undefined
|
101
|
-
? kcContextDefaultMock
|
102
|
-
: { pageId: mockPageId, ...kcContextCommonMock }
|
103
|
-
});
|
104
|
-
|
105
|
-
if (partialKcContextCustomMock !== undefined) {
|
106
|
-
deepAssign({
|
107
|
-
target: kcContext,
|
108
|
-
source: partialKcContextCustomMock
|
109
|
-
});
|
110
|
-
}
|
111
|
-
|
112
|
-
if (mockProperties !== undefined) {
|
113
|
-
deepAssign({
|
114
|
-
target: kcContext.properties,
|
115
|
-
source: mockProperties
|
116
|
-
});
|
117
|
-
}
|
118
|
-
|
119
|
-
return { kcContext };
|
120
|
-
}
|
121
|
-
|
122
|
-
if (realKcContext === undefined) {
|
123
|
-
return { kcContext: undefined as any };
|
124
|
-
}
|
125
|
-
|
126
|
-
if (realKcContext.themeType !== "account") {
|
127
|
-
return { kcContext: undefined as any };
|
128
|
-
}
|
129
|
-
|
130
|
-
return { kcContext: realKcContext as any };
|
131
|
-
}
|
132
|
-
|
133
|
-
return { getKcContext };
|
134
|
-
}
|
@@ -1,23 +0,0 @@
|
|
1
|
-
import type { DeepPartial } from "keycloakify/tools/DeepPartial";
|
2
|
-
import type { ExtendKcContext } from "./getKcContextFromWindow";
|
3
|
-
import { createGetKcContext } from "./createGetKcContext";
|
4
|
-
|
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
|
-
*/
|
8
|
-
export function getKcContext<
|
9
|
-
KcContextExtension extends { pageId: string } = never
|
10
|
-
>(params?: {
|
11
|
-
mockPageId?: ExtendKcContext<KcContextExtension>["pageId"];
|
12
|
-
mockData?: readonly DeepPartial<ExtendKcContext<KcContextExtension>>[];
|
13
|
-
}): { kcContext: ExtendKcContext<KcContextExtension> | undefined } {
|
14
|
-
const { mockPageId, mockData } = params ?? {};
|
15
|
-
|
16
|
-
const { getKcContext } = createGetKcContext({
|
17
|
-
mockData
|
18
|
-
});
|
19
|
-
|
20
|
-
const { kcContext } = getKcContext({ mockPageId });
|
21
|
-
|
22
|
-
return { kcContext };
|
23
|
-
}
|
@@ -1,15 +0,0 @@
|
|
1
|
-
import type { AndByDiscriminatingKey } from "keycloakify/tools/AndByDiscriminatingKey";
|
2
|
-
import { nameOfTheGlobal } from "keycloakify/bin/shared/constants";
|
3
|
-
import type { KcContext } from "./KcContext";
|
4
|
-
|
5
|
-
export type ExtendKcContext<KcContextExtension extends { pageId: string }> = [
|
6
|
-
KcContextExtension
|
7
|
-
] extends [never]
|
8
|
-
? KcContext
|
9
|
-
: AndByDiscriminatingKey<"pageId", KcContextExtension & KcContext.Common, KcContext>;
|
10
|
-
|
11
|
-
export function getKcContextFromWindow<
|
12
|
-
KcContextExtension extends { pageId: string } = never
|
13
|
-
>(): ExtendKcContext<KcContextExtension> | undefined {
|
14
|
-
return typeof window === "undefined" ? undefined : (window as any)[nameOfTheGlobal];
|
15
|
-
}
|
@@ -1,206 +0,0 @@
|
|
1
|
-
import type { KcContext, Attribute } from "./KcContext";
|
2
|
-
import { kcContextMocks, kcContextCommonMock } from "./kcContextMocks";
|
3
|
-
import type { DeepPartial } from "keycloakify/tools/DeepPartial";
|
4
|
-
import { deepAssign } from "keycloakify/tools/deepAssign";
|
5
|
-
import { isStorybook } from "keycloakify/lib/isStorybook";
|
6
|
-
import { id } from "tsafe/id";
|
7
|
-
import { exclude } from "tsafe/exclude";
|
8
|
-
import { assert } from "tsafe/assert";
|
9
|
-
import type { ExtendKcContext } from "./getKcContextFromWindow";
|
10
|
-
import { getKcContextFromWindow } from "./getKcContextFromWindow";
|
11
|
-
import { symToStr } from "tsafe/symToStr";
|
12
|
-
|
13
|
-
export function createGetKcContext<
|
14
|
-
KcContextExtension extends { pageId: string } = never
|
15
|
-
>(params?: {
|
16
|
-
mockData?: readonly DeepPartial<ExtendKcContext<KcContextExtension>>[];
|
17
|
-
mockProperties?: Record<string, string>;
|
18
|
-
}) {
|
19
|
-
const { mockData, mockProperties } = params ?? {};
|
20
|
-
|
21
|
-
function getKcContext<
|
22
|
-
PageId extends
|
23
|
-
| ExtendKcContext<KcContextExtension>["pageId"]
|
24
|
-
| undefined = undefined
|
25
|
-
>(params?: {
|
26
|
-
mockPageId?: PageId;
|
27
|
-
storyPartialKcContext?: DeepPartial<
|
28
|
-
Extract<ExtendKcContext<KcContextExtension>, { pageId: PageId }>
|
29
|
-
>;
|
30
|
-
}): {
|
31
|
-
kcContext: PageId extends undefined
|
32
|
-
? ExtendKcContext<KcContextExtension> | undefined
|
33
|
-
: Extract<ExtendKcContext<KcContextExtension>, { pageId: PageId }>;
|
34
|
-
} {
|
35
|
-
const { mockPageId, storyPartialKcContext } = params ?? {};
|
36
|
-
|
37
|
-
const realKcContext = getKcContextFromWindow<KcContextExtension>();
|
38
|
-
|
39
|
-
if (mockPageId !== undefined && realKcContext === undefined) {
|
40
|
-
//TODO maybe trow if no mock fo custom page
|
41
|
-
|
42
|
-
warn_that_mock_is_enbaled: {
|
43
|
-
if (isStorybook) {
|
44
|
-
break warn_that_mock_is_enbaled;
|
45
|
-
}
|
46
|
-
|
47
|
-
console.log(
|
48
|
-
`%cKeycloakify: ${symToStr({
|
49
|
-
mockPageId
|
50
|
-
})} set to ${mockPageId}.`,
|
51
|
-
"background: red; color: yellow; font-size: medium"
|
52
|
-
);
|
53
|
-
}
|
54
|
-
|
55
|
-
const kcContextDefaultMock = kcContextMocks.find(
|
56
|
-
({ pageId }) => pageId === mockPageId
|
57
|
-
);
|
58
|
-
|
59
|
-
const partialKcContextCustomMock = (() => {
|
60
|
-
const out: DeepPartial<ExtendKcContext<KcContextExtension>> = {};
|
61
|
-
|
62
|
-
const mockDataPick = mockData?.find(
|
63
|
-
({ pageId }) => pageId === mockPageId
|
64
|
-
);
|
65
|
-
|
66
|
-
if (mockDataPick !== undefined) {
|
67
|
-
deepAssign({
|
68
|
-
target: out,
|
69
|
-
source: mockDataPick
|
70
|
-
});
|
71
|
-
}
|
72
|
-
|
73
|
-
if (storyPartialKcContext !== undefined) {
|
74
|
-
deepAssign({
|
75
|
-
target: out,
|
76
|
-
source: storyPartialKcContext
|
77
|
-
});
|
78
|
-
}
|
79
|
-
|
80
|
-
return Object.keys(out).length === 0 ? undefined : out;
|
81
|
-
})();
|
82
|
-
|
83
|
-
if (
|
84
|
-
kcContextDefaultMock === undefined &&
|
85
|
-
partialKcContextCustomMock === undefined
|
86
|
-
) {
|
87
|
-
console.warn(
|
88
|
-
[
|
89
|
-
`WARNING: You declared the non build in page ${mockPageId} but you didn't `,
|
90
|
-
`provide mock data needed to debug the page outside of Keycloak as you are trying to do now.`,
|
91
|
-
`Please check the documentation of the getKcContext function`
|
92
|
-
].join("\n")
|
93
|
-
);
|
94
|
-
}
|
95
|
-
|
96
|
-
const kcContext: any = {};
|
97
|
-
|
98
|
-
deepAssign({
|
99
|
-
target: kcContext,
|
100
|
-
source:
|
101
|
-
kcContextDefaultMock !== undefined
|
102
|
-
? kcContextDefaultMock
|
103
|
-
: { pageId: mockPageId, ...kcContextCommonMock }
|
104
|
-
});
|
105
|
-
|
106
|
-
if (partialKcContextCustomMock !== undefined) {
|
107
|
-
deepAssign({
|
108
|
-
target: kcContext,
|
109
|
-
source: partialKcContextCustomMock
|
110
|
-
});
|
111
|
-
|
112
|
-
if ("profile" in partialKcContextCustomMock) {
|
113
|
-
assert(
|
114
|
-
kcContextDefaultMock !== undefined &&
|
115
|
-
"profile" in kcContextDefaultMock
|
116
|
-
);
|
117
|
-
|
118
|
-
const { attributes } = kcContextDefaultMock.profile;
|
119
|
-
|
120
|
-
id<KcContext.Register>(kcContext).profile.attributes = [];
|
121
|
-
id<KcContext.Register>(kcContext).profile.attributesByName = {};
|
122
|
-
|
123
|
-
const partialAttributes = [
|
124
|
-
...((
|
125
|
-
partialKcContextCustomMock as DeepPartial<KcContext.Register>
|
126
|
-
).profile?.attributes ?? [])
|
127
|
-
].filter(exclude(undefined));
|
128
|
-
|
129
|
-
attributes.forEach(attribute => {
|
130
|
-
const partialAttribute = partialAttributes.find(
|
131
|
-
({ name }) => name === attribute.name
|
132
|
-
);
|
133
|
-
|
134
|
-
const augmentedAttribute: Attribute = {} as any;
|
135
|
-
|
136
|
-
deepAssign({
|
137
|
-
target: augmentedAttribute,
|
138
|
-
source: attribute
|
139
|
-
});
|
140
|
-
|
141
|
-
if (partialAttribute !== undefined) {
|
142
|
-
partialAttributes.splice(
|
143
|
-
partialAttributes.indexOf(partialAttribute),
|
144
|
-
1
|
145
|
-
);
|
146
|
-
|
147
|
-
deepAssign({
|
148
|
-
target: augmentedAttribute,
|
149
|
-
source: partialAttribute
|
150
|
-
});
|
151
|
-
}
|
152
|
-
|
153
|
-
id<KcContext.Register>(kcContext).profile.attributes.push(
|
154
|
-
augmentedAttribute
|
155
|
-
);
|
156
|
-
id<KcContext.Register>(kcContext).profile.attributesByName[
|
157
|
-
augmentedAttribute.name
|
158
|
-
] = augmentedAttribute;
|
159
|
-
});
|
160
|
-
|
161
|
-
partialAttributes
|
162
|
-
.map(partialAttribute => ({
|
163
|
-
validators: {},
|
164
|
-
...partialAttribute
|
165
|
-
}))
|
166
|
-
.forEach(partialAttribute => {
|
167
|
-
const { name } = partialAttribute;
|
168
|
-
|
169
|
-
assert(
|
170
|
-
name !== undefined,
|
171
|
-
"If you define a mock attribute it must have at least a name"
|
172
|
-
);
|
173
|
-
|
174
|
-
id<KcContext.Register>(kcContext).profile.attributes.push(
|
175
|
-
partialAttribute as any
|
176
|
-
);
|
177
|
-
id<KcContext.Register>(kcContext).profile.attributesByName[
|
178
|
-
name
|
179
|
-
] = partialAttribute as any;
|
180
|
-
});
|
181
|
-
}
|
182
|
-
}
|
183
|
-
|
184
|
-
if (mockProperties !== undefined) {
|
185
|
-
deepAssign({
|
186
|
-
target: kcContext.properties,
|
187
|
-
source: mockProperties
|
188
|
-
});
|
189
|
-
}
|
190
|
-
|
191
|
-
return { kcContext };
|
192
|
-
}
|
193
|
-
|
194
|
-
if (realKcContext === undefined) {
|
195
|
-
return { kcContext: undefined as any };
|
196
|
-
}
|
197
|
-
|
198
|
-
if (realKcContext.themeType !== "login") {
|
199
|
-
return { kcContext: undefined as any };
|
200
|
-
}
|
201
|
-
|
202
|
-
return { kcContext: realKcContext as any };
|
203
|
-
}
|
204
|
-
|
205
|
-
return { getKcContext };
|
206
|
-
}
|
@@ -1,23 +0,0 @@
|
|
1
|
-
import type { DeepPartial } from "keycloakify/tools/DeepPartial";
|
2
|
-
import type { ExtendKcContext } from "./getKcContextFromWindow";
|
3
|
-
import { createGetKcContext } from "./createGetKcContext";
|
4
|
-
|
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
|
-
*/
|
8
|
-
export function getKcContext<
|
9
|
-
KcContextExtension extends { pageId: string } = never
|
10
|
-
>(params?: {
|
11
|
-
mockPageId?: ExtendKcContext<KcContextExtension>["pageId"];
|
12
|
-
mockData?: readonly DeepPartial<ExtendKcContext<KcContextExtension>>[];
|
13
|
-
}): { kcContext: ExtendKcContext<KcContextExtension> | undefined } {
|
14
|
-
const { mockPageId, mockData } = params ?? {};
|
15
|
-
|
16
|
-
const { getKcContext } = createGetKcContext<KcContextExtension>({
|
17
|
-
mockData
|
18
|
-
});
|
19
|
-
|
20
|
-
const { kcContext } = getKcContext({ mockPageId });
|
21
|
-
|
22
|
-
return { kcContext };
|
23
|
-
}
|
@@ -1,15 +0,0 @@
|
|
1
|
-
import type { KcContext } from "./KcContext";
|
2
|
-
import type { AndByDiscriminatingKey } from "keycloakify/tools/AndByDiscriminatingKey";
|
3
|
-
import { nameOfTheGlobal } from "keycloakify/bin/shared/constants";
|
4
|
-
|
5
|
-
export type ExtendKcContext<KcContextExtension extends { pageId: string }> = [
|
6
|
-
KcContextExtension
|
7
|
-
] extends [never]
|
8
|
-
? KcContext
|
9
|
-
: AndByDiscriminatingKey<"pageId", KcContextExtension & KcContext.Common, KcContext>;
|
10
|
-
|
11
|
-
export function getKcContextFromWindow<
|
12
|
-
KcContextExtension extends { pageId: string } = never
|
13
|
-
>(): ExtendKcContext<KcContextExtension> | undefined {
|
14
|
-
return typeof window === "undefined" ? undefined : (window as any)[nameOfTheGlobal];
|
15
|
-
}
|
@@ -1,31 +0,0 @@
|
|
1
|
-
export type AndByDiscriminatingKey<
|
2
|
-
DiscriminatingKey extends string,
|
3
|
-
U1 extends Record<DiscriminatingKey, string>,
|
4
|
-
U2 extends Record<DiscriminatingKey, string>
|
5
|
-
> = AndByDiscriminatingKey.Tf1<DiscriminatingKey, U1, U1, U2>;
|
6
|
-
|
7
|
-
export declare namespace AndByDiscriminatingKey {
|
8
|
-
export type Tf1<
|
9
|
-
DiscriminatingKey extends string,
|
10
|
-
U1,
|
11
|
-
U1Again extends Record<DiscriminatingKey, string>,
|
12
|
-
U2 extends Record<DiscriminatingKey, string>
|
13
|
-
> =
|
14
|
-
U1 extends Pick<U2, DiscriminatingKey>
|
15
|
-
? Tf2<DiscriminatingKey, U1, U2, U1Again>
|
16
|
-
: U1Again[DiscriminatingKey] & U2[DiscriminatingKey] extends never
|
17
|
-
? U1 | U2
|
18
|
-
: U1;
|
19
|
-
|
20
|
-
export type Tf2<
|
21
|
-
DiscriminatingKey extends string,
|
22
|
-
SingletonU1 extends Record<DiscriminatingKey, string>,
|
23
|
-
U2,
|
24
|
-
U1 extends Record<DiscriminatingKey, string>
|
25
|
-
> =
|
26
|
-
U2 extends Pick<SingletonU1, DiscriminatingKey>
|
27
|
-
? U2 & SingletonU1
|
28
|
-
: U2 extends Pick<U1, DiscriminatingKey>
|
29
|
-
? never
|
30
|
-
: U2;
|
31
|
-
}
|
package/src/tools/deepClone.ts
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
import "minimal-polyfills/Object.fromEntries";
|
2
|
-
|
3
|
-
export function deepClone<T>(o: T): T {
|
4
|
-
if (!(o instanceof Object)) {
|
5
|
-
return o;
|
6
|
-
}
|
7
|
-
|
8
|
-
if (typeof o === "function") {
|
9
|
-
return o;
|
10
|
-
}
|
11
|
-
|
12
|
-
if (o instanceof Array) {
|
13
|
-
return o.map(deepClone) as any;
|
14
|
-
}
|
15
|
-
|
16
|
-
return Object.fromEntries(
|
17
|
-
Object.entries(o).map(([key, value]) => [key, deepClone(value)])
|
18
|
-
) as any;
|
19
|
-
}
|
package/src/tools/memoize.ts
DELETED
@@ -1,55 +0,0 @@
|
|
1
|
-
type SimpleType = number | string | boolean | null | undefined;
|
2
|
-
type FuncWithSimpleParams<T extends SimpleType[], R> = (...args: T) => R;
|
3
|
-
|
4
|
-
export function memoize<T extends SimpleType[], R>(
|
5
|
-
fn: FuncWithSimpleParams<T, R>,
|
6
|
-
options?: {
|
7
|
-
argsLength?: number;
|
8
|
-
max?: number;
|
9
|
-
}
|
10
|
-
): FuncWithSimpleParams<T, R> {
|
11
|
-
const cache = new Map<string, ReturnType<FuncWithSimpleParams<T, R>>>();
|
12
|
-
|
13
|
-
const { argsLength = fn.length, max = Infinity } = options ?? {};
|
14
|
-
|
15
|
-
return ((...args: Parameters<FuncWithSimpleParams<T, R>>) => {
|
16
|
-
const key = JSON.stringify(
|
17
|
-
args
|
18
|
-
.slice(0, argsLength)
|
19
|
-
.map(v => {
|
20
|
-
if (v === null) {
|
21
|
-
return "null";
|
22
|
-
}
|
23
|
-
if (v === undefined) {
|
24
|
-
return "undefined";
|
25
|
-
}
|
26
|
-
switch (typeof v) {
|
27
|
-
case "number":
|
28
|
-
return `number-${v}`;
|
29
|
-
case "string":
|
30
|
-
return `string-${v}`;
|
31
|
-
case "boolean":
|
32
|
-
return `boolean-${v ? "true" : "false"}`;
|
33
|
-
}
|
34
|
-
})
|
35
|
-
.join("-sIs9sAslOdeWlEdIos3-")
|
36
|
-
);
|
37
|
-
|
38
|
-
if (cache.has(key)) {
|
39
|
-
return cache.get(key);
|
40
|
-
}
|
41
|
-
|
42
|
-
if (max === cache.size) {
|
43
|
-
for (const key of cache.keys()) {
|
44
|
-
cache.delete(key);
|
45
|
-
break;
|
46
|
-
}
|
47
|
-
}
|
48
|
-
|
49
|
-
const value = fn(...args);
|
50
|
-
|
51
|
-
cache.set(key, value);
|
52
|
-
|
53
|
-
return value;
|
54
|
-
}) as any;
|
55
|
-
}
|
@@ -1,5 +0,0 @@
|
|
1
|
-
export type AndByDiscriminatingKey<DiscriminatingKey extends string, U1 extends Record<DiscriminatingKey, string>, U2 extends Record<DiscriminatingKey, string>> = AndByDiscriminatingKey.Tf1<DiscriminatingKey, U1, U1, U2>;
|
2
|
-
export declare namespace AndByDiscriminatingKey {
|
3
|
-
type Tf1<DiscriminatingKey extends string, U1, U1Again extends Record<DiscriminatingKey, string>, U2 extends Record<DiscriminatingKey, string>> = U1 extends Pick<U2, DiscriminatingKey> ? Tf2<DiscriminatingKey, U1, U2, U1Again> : U1Again[DiscriminatingKey] & U2[DiscriminatingKey] extends never ? U1 | U2 : U1;
|
4
|
-
type Tf2<DiscriminatingKey extends string, SingletonU1 extends Record<DiscriminatingKey, string>, U2, U1 extends Record<DiscriminatingKey, string>> = U2 extends Pick<SingletonU1, DiscriminatingKey> ? U2 & SingletonU1 : U2 extends Pick<U1, DiscriminatingKey> ? never : U2;
|
5
|
-
}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"AndByDiscriminatingKey.js","sourceRoot":"","sources":["../src/tools/AndByDiscriminatingKey.ts"],"names":[],"mappings":""}
|
package/tools/deepClone.d.ts
DELETED
package/tools/deepClone.js
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
import "minimal-polyfills/Object.fromEntries";
|
2
|
-
export function deepClone(o) {
|
3
|
-
if (!(o instanceof Object)) {
|
4
|
-
return o;
|
5
|
-
}
|
6
|
-
if (typeof o === "function") {
|
7
|
-
return o;
|
8
|
-
}
|
9
|
-
if (o instanceof Array) {
|
10
|
-
return o.map(deepClone);
|
11
|
-
}
|
12
|
-
return Object.fromEntries(Object.entries(o).map(([key, value]) => [key, deepClone(value)]));
|
13
|
-
}
|
14
|
-
//# sourceMappingURL=deepClone.js.map
|
package/tools/deepClone.js.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"deepClone.js","sourceRoot":"","sources":["../src/tools/deepClone.ts"],"names":[],"mappings":"AAAA,OAAO,sCAAsC,CAAC;AAE9C,MAAM,UAAU,SAAS,CAAI,CAAI;IAC7B,IAAI,CAAC,CAAC,CAAC,YAAY,MAAM,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,CAAC;IACb,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,UAAU,EAAE,CAAC;QAC1B,OAAO,CAAC,CAAC;IACb,CAAC;IAED,IAAI,CAAC,YAAY,KAAK,EAAE,CAAC;QACrB,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAQ,CAAC;IACnC,CAAC;IAED,OAAO,MAAM,CAAC,WAAW,CACrB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAC5D,CAAC;AACb,CAAC"}
|
package/tools/memoize.d.ts
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
type SimpleType = number | string | boolean | null | undefined;
|
2
|
-
type FuncWithSimpleParams<T extends SimpleType[], R> = (...args: T) => R;
|
3
|
-
export declare function memoize<T extends SimpleType[], R>(fn: FuncWithSimpleParams<T, R>, options?: {
|
4
|
-
argsLength?: number;
|
5
|
-
max?: number;
|
6
|
-
}): FuncWithSimpleParams<T, R>;
|
7
|
-
export {};
|
package/tools/memoize.js
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
export function memoize(fn, options) {
|
2
|
-
const cache = new Map();
|
3
|
-
const { argsLength = fn.length, max = Infinity } = options !== null && options !== void 0 ? options : {};
|
4
|
-
return ((...args) => {
|
5
|
-
const key = JSON.stringify(args
|
6
|
-
.slice(0, argsLength)
|
7
|
-
.map(v => {
|
8
|
-
if (v === null) {
|
9
|
-
return "null";
|
10
|
-
}
|
11
|
-
if (v === undefined) {
|
12
|
-
return "undefined";
|
13
|
-
}
|
14
|
-
switch (typeof v) {
|
15
|
-
case "number":
|
16
|
-
return `number-${v}`;
|
17
|
-
case "string":
|
18
|
-
return `string-${v}`;
|
19
|
-
case "boolean":
|
20
|
-
return `boolean-${v ? "true" : "false"}`;
|
21
|
-
}
|
22
|
-
})
|
23
|
-
.join("-sIs9sAslOdeWlEdIos3-"));
|
24
|
-
if (cache.has(key)) {
|
25
|
-
return cache.get(key);
|
26
|
-
}
|
27
|
-
if (max === cache.size) {
|
28
|
-
for (const key of cache.keys()) {
|
29
|
-
cache.delete(key);
|
30
|
-
break;
|
31
|
-
}
|
32
|
-
}
|
33
|
-
const value = fn(...args);
|
34
|
-
cache.set(key, value);
|
35
|
-
return value;
|
36
|
-
});
|
37
|
-
}
|
38
|
-
//# sourceMappingURL=memoize.js.map
|
package/tools/memoize.js.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"memoize.js","sourceRoot":"","sources":["../src/tools/memoize.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,OAAO,CACnB,EAA8B,EAC9B,OAGC;IAED,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkD,CAAC;IAExE,MAAM,EAAE,UAAU,GAAG,EAAE,CAAC,MAAM,EAAE,GAAG,GAAG,QAAQ,EAAE,GAAG,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,EAAE,CAAC;IAEjE,OAAO,CAAC,CAAC,GAAG,IAA4C,EAAE,EAAE;QACxD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CACtB,IAAI;aACC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC;aACpB,GAAG,CAAC,CAAC,CAAC,EAAE;YACL,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;gBACb,OAAO,MAAM,CAAC;YAClB,CAAC;YACD,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;gBAClB,OAAO,WAAW,CAAC;YACvB,CAAC;YACD,QAAQ,OAAO,CAAC,EAAE,CAAC;gBACf,KAAK,QAAQ;oBACT,OAAO,UAAU,CAAC,EAAE,CAAC;gBACzB,KAAK,QAAQ;oBACT,OAAO,UAAU,CAAC,EAAE,CAAC;gBACzB,KAAK,SAAS;oBACV,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YACjD,CAAC;QACL,CAAC,CAAC;aACD,IAAI,CAAC,uBAAuB,CAAC,CACrC,CAAC;QAEF,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACjB,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;QAED,IAAI,GAAG,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;YACrB,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC7B,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAClB,MAAM;YACV,CAAC;QACL,CAAC;QAED,MAAM,KAAK,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QAE1B,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAEtB,OAAO,KAAK,CAAC;IACjB,CAAC,CAAQ,CAAC;AACd,CAAC"}
|