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.
Files changed (236) hide show
  1. package/PUBLIC_URL.d.ts +1 -1
  2. package/PUBLIC_URL.js +1 -1
  3. package/PUBLIC_URL.js.map +1 -1
  4. package/account/Fallback.js.map +1 -1
  5. package/account/Template.js +3 -3
  6. package/account/Template.js.map +1 -1
  7. package/account/i18n/baseMessages/index.js.map +1 -1
  8. package/account/i18n/i18n.js.map +1 -1
  9. package/account/index.d.ts +2 -2
  10. package/account/index.js +1 -2
  11. package/account/index.js.map +1 -1
  12. package/account/kcContext/KcContext.d.ts +12 -0
  13. package/account/kcContext/KcContext.js.map +1 -1
  14. package/account/kcContext/getKcContextMock.d.ts +24 -0
  15. package/account/kcContext/getKcContextMock.js +28 -0
  16. package/account/kcContext/getKcContextMock.js.map +1 -0
  17. package/account/kcContext/index.d.ts +2 -1
  18. package/account/kcContext/index.js +1 -1
  19. package/account/kcContext/index.js.map +1 -1
  20. package/account/kcContext/kcContextMocks.js +23 -91
  21. package/account/kcContext/kcContextMocks.js.map +1 -1
  22. package/account/pages/Account.js +1 -1
  23. package/account/pages/Account.js.map +1 -1
  24. package/account/pages/Applications.js +2 -2
  25. package/account/pages/Applications.js.map +1 -1
  26. package/account/pages/FederatedIdentity.js +1 -1
  27. package/account/pages/FederatedIdentity.js.map +1 -1
  28. package/account/pages/Log.js +1 -1
  29. package/account/pages/Log.js.map +1 -1
  30. package/account/pages/Password.js +6 -4
  31. package/account/pages/Password.js.map +1 -1
  32. package/account/pages/Sessions.js +1 -1
  33. package/account/pages/Sessions.js.map +1 -1
  34. package/account/pages/Totp.js +1 -1
  35. package/account/pages/Totp.js.map +1 -1
  36. package/bin/main.js +174 -162
  37. package/lib/BASE_URL.js.map +1 -1
  38. package/login/Fallback.js.map +1 -1
  39. package/login/Template.js +7 -7
  40. package/login/Template.js.map +1 -1
  41. package/login/UserProfileFormFields.js +24 -68
  42. package/login/UserProfileFormFields.js.map +1 -1
  43. package/login/i18n/baseMessages/index.js.map +1 -1
  44. package/login/i18n/i18n.d.ts +1 -1
  45. package/login/i18n/i18n.js +1 -1
  46. package/login/i18n/i18n.js.map +1 -1
  47. package/login/index.d.ts +2 -3
  48. package/login/index.js +1 -2
  49. package/login/index.js.map +1 -1
  50. package/login/kcContext/KcContext.d.ts +23 -13
  51. package/login/kcContext/KcContext.js.map +1 -1
  52. package/login/kcContext/getKcContextMock.d.ts +24 -0
  53. package/login/kcContext/getKcContextMock.js +28 -0
  54. package/login/kcContext/getKcContextMock.js.map +1 -0
  55. package/login/kcContext/index.d.ts +2 -1
  56. package/login/kcContext/index.js +1 -1
  57. package/login/kcContext/index.js.map +1 -1
  58. package/login/kcContext/kcContextMocks.js +29 -103
  59. package/login/kcContext/kcContextMocks.js.map +1 -1
  60. package/login/lib/useDownloadTerms.js +8 -14
  61. package/login/lib/useDownloadTerms.js.map +1 -1
  62. package/login/lib/useGetClassName.js +1 -1
  63. package/login/lib/useGetClassName.js.map +1 -1
  64. package/login/lib/useUserProfileForm.d.ts +9 -1
  65. package/login/lib/useUserProfileForm.js +94 -15
  66. package/login/lib/useUserProfileForm.js.map +1 -1
  67. package/login/pages/Code.js +1 -1
  68. package/login/pages/Code.js.map +1 -1
  69. package/login/pages/DeleteAccountConfirm.js +2 -2
  70. package/login/pages/DeleteAccountConfirm.js.map +1 -1
  71. package/login/pages/DeleteCredential.js +1 -1
  72. package/login/pages/DeleteCredential.js.map +1 -1
  73. package/login/pages/Error.js +1 -1
  74. package/login/pages/Error.js.map +1 -1
  75. package/login/pages/FrontchannelLogout.js +1 -1
  76. package/login/pages/FrontchannelLogout.js.map +1 -1
  77. package/login/pages/IdpReviewUserProfile.js +1 -1
  78. package/login/pages/IdpReviewUserProfile.js.map +1 -1
  79. package/login/pages/Info.js +5 -5
  80. package/login/pages/Info.js.map +1 -1
  81. package/login/pages/Login.js +4 -4
  82. package/login/pages/Login.js.map +1 -1
  83. package/login/pages/LoginConfigTotp.js +2 -2
  84. package/login/pages/LoginConfigTotp.js.map +1 -1
  85. package/login/pages/LoginIdpLinkConfirm.js +1 -1
  86. package/login/pages/LoginIdpLinkConfirm.js.map +1 -1
  87. package/login/pages/LoginIdpLinkEmail.js +1 -1
  88. package/login/pages/LoginIdpLinkEmail.js.map +1 -1
  89. package/login/pages/LoginOauth2DeviceVerifyUserCode.js +1 -1
  90. package/login/pages/LoginOauth2DeviceVerifyUserCode.js.map +1 -1
  91. package/login/pages/LoginOauthGrant.js +2 -2
  92. package/login/pages/LoginOauthGrant.js.map +1 -1
  93. package/login/pages/LoginOtp.js +1 -1
  94. package/login/pages/LoginOtp.js.map +1 -1
  95. package/login/pages/LoginPageExpired.js +1 -1
  96. package/login/pages/LoginPageExpired.js.map +1 -1
  97. package/login/pages/LoginPassword.js +3 -3
  98. package/login/pages/LoginPassword.js.map +1 -1
  99. package/login/pages/LoginRecoveryAuthnCodeConfig.js +10 -10
  100. package/login/pages/LoginRecoveryAuthnCodeConfig.js.map +1 -1
  101. package/login/pages/LoginRecoveryAuthnCodeInput.js +1 -1
  102. package/login/pages/LoginRecoveryAuthnCodeInput.js.map +1 -1
  103. package/login/pages/LoginResetOtp.js +1 -1
  104. package/login/pages/LoginResetOtp.js.map +1 -1
  105. package/login/pages/LoginResetPassword.js +2 -2
  106. package/login/pages/LoginResetPassword.js.map +1 -1
  107. package/login/pages/LoginUpdatePassword.js +3 -3
  108. package/login/pages/LoginUpdatePassword.js.map +1 -1
  109. package/login/pages/LoginUpdateProfile.js +4 -2
  110. package/login/pages/LoginUpdateProfile.js.map +1 -1
  111. package/login/pages/LoginUsername.js +3 -3
  112. package/login/pages/LoginUsername.js.map +1 -1
  113. package/login/pages/LoginVerifyEmail.js +1 -1
  114. package/login/pages/LoginVerifyEmail.js.map +1 -1
  115. package/login/pages/LoginX509Info.js +1 -1
  116. package/login/pages/LoginX509Info.js.map +1 -1
  117. package/login/pages/LogoutConfirm.js +1 -1
  118. package/login/pages/LogoutConfirm.js.map +1 -1
  119. package/login/pages/Register.js +8 -4
  120. package/login/pages/Register.js.map +1 -1
  121. package/login/pages/SamlPostForm.js +1 -1
  122. package/login/pages/SamlPostForm.js.map +1 -1
  123. package/login/pages/SelectAuthenticator.js +2 -2
  124. package/login/pages/SelectAuthenticator.js.map +1 -1
  125. package/login/pages/Terms.js +1 -1
  126. package/login/pages/Terms.js.map +1 -1
  127. package/login/pages/UpdateEmail.js +5 -3
  128. package/login/pages/UpdateEmail.js.map +1 -1
  129. package/login/pages/WebauthnAuthenticate.js +8 -8
  130. package/login/pages/WebauthnAuthenticate.js.map +1 -1
  131. package/login/pages/WebauthnError.js +2 -2
  132. package/login/pages/WebauthnError.js.map +1 -1
  133. package/login/pages/WebauthnRegister.js +5 -5
  134. package/login/pages/WebauthnRegister.js.map +1 -1
  135. package/package.json +26 -38
  136. package/src/PUBLIC_URL.ts +1 -1
  137. package/src/account/Template.tsx +2 -3
  138. package/src/account/index.ts +2 -2
  139. package/src/account/kcContext/KcContext.ts +19 -1
  140. package/src/account/kcContext/getKcContextMock.ts +80 -0
  141. package/src/account/kcContext/index.ts +2 -1
  142. package/src/account/kcContext/kcContextMocks.ts +26 -91
  143. package/src/bin/copy-keycloak-resources-to-public.ts +1 -4
  144. package/src/bin/keycloakify/generateFtl/ftl_object_to_js_code_declaring_an_object.ftl +19 -11
  145. package/src/bin/start-keycloak/start-keycloak.ts +18 -5
  146. package/src/bin/tools/getNpmWorkspaceRootDirPath.ts +25 -25
  147. package/src/login/Template.tsx +4 -5
  148. package/src/login/UserProfileFormFields.tsx +28 -80
  149. package/src/login/i18n/i18n.tsx +3 -3
  150. package/src/login/index.ts +6 -3
  151. package/src/login/kcContext/KcContext.ts +43 -31
  152. package/src/login/kcContext/getKcContextMock.ts +80 -0
  153. package/src/login/kcContext/index.ts +7 -1
  154. package/src/login/kcContext/kcContextMocks.ts +92 -165
  155. package/src/login/lib/useDownloadTerms.ts +10 -24
  156. package/src/login/lib/useGetClassName.ts +1 -1
  157. package/src/login/lib/useUserProfileForm.tsx +117 -13
  158. package/src/login/pages/LoginConfigTotp.tsx +1 -1
  159. package/src/login/pages/LoginRecoveryAuthnCodeConfig.tsx +7 -8
  160. package/src/login/pages/WebauthnAuthenticate.tsx +2 -3
  161. package/src/login/pages/WebauthnRegister.tsx +2 -3
  162. package/src/tools/ExtractAfterStartingWith.ts +4 -0
  163. package/src/tools/StatefulObservable/hooks/useRerenderOnChange.ts +4 -4
  164. package/src/tools/ValueOf.ts +2 -0
  165. package/src/tools/deepAssign.ts +51 -20
  166. package/src/tools/structuredCloneButFunctions.ts +24 -0
  167. package/src/tools/useInsertLinkTags.ts +78 -87
  168. package/src/tools/useInsertScriptTags.ts +69 -78
  169. package/src/tools/useOnFirstMount.ts +18 -0
  170. package/tools/Array.prototype.every.js.map +1 -1
  171. package/tools/ExtractAfterStartingWith.d.ts +1 -0
  172. package/tools/ExtractAfterStartingWith.js +2 -0
  173. package/tools/ExtractAfterStartingWith.js.map +1 -0
  174. package/tools/HTMLElement.prototype.prepend.js.map +1 -1
  175. package/tools/StatefulObservable/StatefulObservable.js.map +1 -1
  176. package/tools/StatefulObservable/hooks/useRerenderOnChange.d.ts +1 -1
  177. package/tools/StatefulObservable/hooks/useRerenderOnChange.js +4 -4
  178. package/tools/StatefulObservable/hooks/useRerenderOnChange.js.map +1 -1
  179. package/tools/ValueOf.d.ts +2 -0
  180. package/tools/ValueOf.js +2 -0
  181. package/tools/ValueOf.js.map +1 -0
  182. package/tools/clsx.js.map +1 -1
  183. package/tools/deepAssign.d.ts +1 -0
  184. package/tools/deepAssign.js +39 -16
  185. package/tools/deepAssign.js.map +1 -1
  186. package/tools/formatNumber.js.map +1 -1
  187. package/tools/structuredCloneButFunctions.d.ts +7 -0
  188. package/tools/structuredCloneButFunctions.js +19 -0
  189. package/tools/structuredCloneButFunctions.js.map +1 -0
  190. package/tools/useInsertLinkTags.d.ts +11 -6
  191. package/tools/useInsertLinkTags.js +53 -53
  192. package/tools/useInsertLinkTags.js.map +1 -1
  193. package/tools/useInsertScriptTags.d.ts +15 -6
  194. package/tools/useInsertScriptTags.js +56 -64
  195. package/tools/useInsertScriptTags.js.map +1 -1
  196. package/tools/useOnFirstMount.d.ts +2 -0
  197. package/tools/useOnFirstMount.js +15 -0
  198. package/tools/useOnFirstMount.js.map +1 -0
  199. package/tools/useSetClassName.js.map +1 -1
  200. package/vite-plugin/index.js +66 -64
  201. package/account/kcContext/createGetKcContext.d.ts +0 -19
  202. package/account/kcContext/createGetKcContext.js +0 -78
  203. package/account/kcContext/createGetKcContext.js.map +0 -1
  204. package/account/kcContext/getKcContext.d.ts +0 -13
  205. package/account/kcContext/getKcContext.js +0 -13
  206. package/account/kcContext/getKcContext.js.map +0 -1
  207. package/account/kcContext/getKcContextFromWindow.d.ts +0 -10
  208. package/account/kcContext/getKcContextFromWindow.js +0 -5
  209. package/account/kcContext/getKcContextFromWindow.js.map +0 -1
  210. package/login/kcContext/createGetKcContext.d.ts +0 -19
  211. package/login/kcContext/createGetKcContext.js +0 -117
  212. package/login/kcContext/createGetKcContext.js.map +0 -1
  213. package/login/kcContext/getKcContext.d.ts +0 -13
  214. package/login/kcContext/getKcContext.js +0 -13
  215. package/login/kcContext/getKcContext.js.map +0 -1
  216. package/login/kcContext/getKcContextFromWindow.d.ts +0 -10
  217. package/login/kcContext/getKcContextFromWindow.js +0 -5
  218. package/login/kcContext/getKcContextFromWindow.js.map +0 -1
  219. package/src/account/kcContext/createGetKcContext.ts +0 -134
  220. package/src/account/kcContext/getKcContext.ts +0 -23
  221. package/src/account/kcContext/getKcContextFromWindow.ts +0 -15
  222. package/src/login/kcContext/createGetKcContext.ts +0 -206
  223. package/src/login/kcContext/getKcContext.ts +0 -23
  224. package/src/login/kcContext/getKcContextFromWindow.ts +0 -15
  225. package/src/tools/AndByDiscriminatingKey.ts +0 -31
  226. package/src/tools/deepClone.ts +0 -19
  227. package/src/tools/memoize.ts +0 -55
  228. package/tools/AndByDiscriminatingKey.d.ts +0 -5
  229. package/tools/AndByDiscriminatingKey.js +0 -2
  230. package/tools/AndByDiscriminatingKey.js.map +0 -1
  231. package/tools/deepClone.d.ts +0 -2
  232. package/tools/deepClone.js +0 -14
  233. package/tools/deepClone.js.map +0 -1
  234. package/tools/memoize.d.ts +0 -7
  235. package/tools/memoize.js +0 -38
  236. 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
- }
@@ -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
- }
@@ -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,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=AndByDiscriminatingKey.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AndByDiscriminatingKey.js","sourceRoot":"","sources":["../src/tools/AndByDiscriminatingKey.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- import "minimal-polyfills/Object.fromEntries";
2
- export declare function deepClone<T>(o: T): T;
@@ -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
@@ -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"}
@@ -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
@@ -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"}