keycloakify 2.3.0 → 2.5.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.
Files changed (177) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/README.md +156 -127
  3. package/bin/KeycloakVersion.js.map +1 -1
  4. package/bin/build-keycloak-theme/build-keycloak-theme.js +57 -54
  5. package/bin/build-keycloak-theme/build-keycloak-theme.js.map +1 -1
  6. package/bin/build-keycloak-theme/ftlValuesGlobalName.js.map +1 -1
  7. package/bin/build-keycloak-theme/generateDebugFiles/generateDebugFiles.js +4 -11
  8. package/bin/build-keycloak-theme/generateDebugFiles/generateDebugFiles.js.map +1 -1
  9. package/bin/build-keycloak-theme/generateFtl/common.ftl +72 -57
  10. package/bin/build-keycloak-theme/generateFtl/generateFtl.d.ts +1 -1
  11. package/bin/build-keycloak-theme/generateFtl/generateFtl.js +47 -44
  12. package/bin/build-keycloak-theme/generateFtl/generateFtl.js.map +1 -1
  13. package/bin/build-keycloak-theme/generateJavaStackFiles.js +12 -8
  14. package/bin/build-keycloak-theme/generateJavaStackFiles.js.map +1 -1
  15. package/bin/build-keycloak-theme/generateKeycloakThemeResources.js +20 -21
  16. package/bin/build-keycloak-theme/generateKeycloakThemeResources.js.map +1 -1
  17. package/bin/build-keycloak-theme/index.js.map +1 -1
  18. package/bin/build-keycloak-theme/replaceImportFromStatic.js +18 -30
  19. package/bin/build-keycloak-theme/replaceImportFromStatic.js.map +1 -1
  20. package/bin/download-builtin-keycloak-theme.js +2 -2
  21. package/bin/download-builtin-keycloak-theme.js.map +1 -1
  22. package/bin/generate-i18n-messages.js +9 -11
  23. package/bin/generate-i18n-messages.js.map +1 -1
  24. package/bin/link_in_test_app.js +6 -22
  25. package/bin/link_in_test_app.js.map +1 -1
  26. package/bin/tools/crawl.js.map +1 -1
  27. package/bin/tools/downloadAndUnzip.js +4 -5
  28. package/bin/tools/downloadAndUnzip.js.map +1 -1
  29. package/bin/tools/grant-exec-perms.js +4 -3
  30. package/bin/tools/grant-exec-perms.js.map +1 -1
  31. package/bin/tools/isInside.js.map +1 -1
  32. package/bin/tools/rm.js +1 -1
  33. package/bin/tools/rm.js.map +1 -1
  34. package/bin/tools/transformCodebase.js +7 -3
  35. package/bin/tools/transformCodebase.js.map +1 -1
  36. package/lib/components/Error.js +1 -2
  37. package/lib/components/Error.js.map +1 -1
  38. package/lib/components/Info.js +1 -15
  39. package/lib/components/Info.js.map +1 -1
  40. package/lib/components/KcApp.js +23 -10
  41. package/lib/components/KcApp.js.map +1 -1
  42. package/lib/components/KcProps.d.ts +4 -2
  43. package/lib/components/KcProps.js +10 -8
  44. package/lib/components/KcProps.js.map +1 -1
  45. package/lib/components/Login.js +20 -18
  46. package/lib/components/Login.js.map +1 -1
  47. package/lib/components/LoginIdpLinkConfirm.js.map +1 -1
  48. package/lib/components/LoginOtp.js +14 -15
  49. package/lib/components/LoginOtp.js.map +1 -1
  50. package/lib/components/LoginResetPassword.js +5 -7
  51. package/lib/components/LoginResetPassword.js.map +1 -1
  52. package/lib/components/LoginUpdateProfile.js +1 -5
  53. package/lib/components/LoginUpdateProfile.js.map +1 -1
  54. package/lib/components/LoginVerifyEmail.js.map +1 -1
  55. package/lib/components/Register.js +1 -4
  56. package/lib/components/Register.js.map +1 -1
  57. package/lib/components/RegisterUserProfile.d.ts +6 -0
  58. package/lib/components/RegisterUserProfile.js +78 -0
  59. package/lib/components/RegisterUserProfile.js.map +1 -0
  60. package/lib/components/Template.js +28 -43
  61. package/lib/components/Template.js.map +1 -1
  62. package/lib/components/Terms.js.map +1 -1
  63. package/lib/getKcContext/KcContextBase.d.ts +78 -18
  64. package/lib/getKcContext/KcContextBase.js +2 -3
  65. package/lib/getKcContext/KcContextBase.js.map +1 -1
  66. package/lib/getKcContext/getKcContext.d.ts +1 -3
  67. package/lib/getKcContext/getKcContext.js +5 -9
  68. package/lib/getKcContext/getKcContext.js.map +1 -1
  69. package/lib/getKcContext/kcContextMocks/kcContextMocks.d.ts +1 -0
  70. package/lib/getKcContext/kcContextMocks/kcContextMocks.js +187 -55
  71. package/lib/getKcContext/kcContextMocks/kcContextMocks.js.map +1 -1
  72. package/lib/getKcContext/kcContextMocks/urlResourcesPath.js.map +1 -1
  73. package/lib/i18n/KcLanguageTag.d.ts +25 -2
  74. package/lib/i18n/KcLanguageTag.js +27 -27
  75. package/lib/i18n/KcLanguageTag.js.map +1 -1
  76. package/lib/i18n/generated_kcMessages/11.0.3/account.js +27 -27
  77. package/lib/i18n/generated_kcMessages/11.0.3/account.js.map +1 -1
  78. package/lib/i18n/generated_kcMessages/11.0.3/admin.js +23 -23
  79. package/lib/i18n/generated_kcMessages/11.0.3/admin.js.map +1 -1
  80. package/lib/i18n/generated_kcMessages/11.0.3/email.js +97 -97
  81. package/lib/i18n/generated_kcMessages/11.0.3/email.js.map +1 -1
  82. package/lib/i18n/generated_kcMessages/11.0.3/login.js +30 -30
  83. package/lib/i18n/generated_kcMessages/11.0.3/login.js.map +1 -1
  84. package/lib/i18n/generated_kcMessages/15.0.2/account.js +29 -29
  85. package/lib/i18n/generated_kcMessages/15.0.2/account.js.map +1 -1
  86. package/lib/i18n/generated_kcMessages/15.0.2/admin.js +23 -23
  87. package/lib/i18n/generated_kcMessages/15.0.2/admin.js.map +1 -1
  88. package/lib/i18n/generated_kcMessages/15.0.2/email.js +111 -111
  89. package/lib/i18n/generated_kcMessages/15.0.2/email.js.map +1 -1
  90. package/lib/i18n/generated_kcMessages/15.0.2/login.js +32 -32
  91. package/lib/i18n/generated_kcMessages/15.0.2/login.js.map +1 -1
  92. package/lib/i18n/kcMessages/login.js +1 -1
  93. package/lib/i18n/kcMessages/login.js.map +1 -1
  94. package/lib/i18n/useKcLanguageTag.js +1 -3
  95. package/lib/i18n/useKcLanguageTag.js.map +1 -1
  96. package/lib/i18n/useKcMessage.d.ts +2 -1
  97. package/lib/i18n/useKcMessage.js +8 -6
  98. package/lib/i18n/useKcMessage.js.map +1 -1
  99. package/lib/keycloakJsAdapter.d.ts +6 -6
  100. package/lib/keycloakJsAdapter.js +10 -12
  101. package/lib/keycloakJsAdapter.js.map +1 -1
  102. package/lib/tools/ReactComponent.d.ts +2 -0
  103. package/lib/tools/ReactComponent.js +3 -0
  104. package/lib/tools/ReactComponent.js.map +1 -0
  105. package/lib/tools/allPropertiesValuesToUndefined.js +1 -2
  106. package/lib/tools/allPropertiesValuesToUndefined.js.map +1 -1
  107. package/lib/tools/appendHead.js +16 -12
  108. package/lib/tools/appendHead.js.map +1 -1
  109. package/lib/tools/assert.js.map +1 -1
  110. package/lib/tools/deepAssign.js +3 -4
  111. package/lib/tools/deepAssign.js.map +1 -1
  112. package/lib/tools/deepClone.js.map +1 -1
  113. package/package.json +26 -6
  114. package/src/bin/KeycloakVersion.ts +0 -2
  115. package/src/bin/build-keycloak-theme/build-keycloak-theme.ts +70 -77
  116. package/src/bin/build-keycloak-theme/ftlValuesGlobalName.ts +1 -2
  117. package/src/bin/build-keycloak-theme/generateDebugFiles/generateDebugFiles.ts +26 -37
  118. package/src/bin/build-keycloak-theme/generateDebugFiles/index.ts +1 -1
  119. package/src/bin/build-keycloak-theme/generateFtl/common.ftl +72 -57
  120. package/src/bin/build-keycloak-theme/generateFtl/generateFtl.ts +75 -95
  121. package/src/bin/build-keycloak-theme/generateFtl/index.ts +1 -1
  122. package/src/bin/build-keycloak-theme/generateJavaStackFiles.ts +38 -56
  123. package/src/bin/build-keycloak-theme/generateKeycloakThemeResources.ts +47 -85
  124. package/src/bin/build-keycloak-theme/index.ts +2 -4
  125. package/src/bin/build-keycloak-theme/replaceImportFromStatic.ts +34 -78
  126. package/src/bin/download-builtin-keycloak-theme.ts +5 -19
  127. package/src/bin/generate-i18n-messages.ts +13 -25
  128. package/src/bin/link_in_test_app.ts +9 -38
  129. package/src/bin/tools/crawl.ts +2 -12
  130. package/src/bin/tools/downloadAndUnzip.ts +6 -22
  131. package/src/bin/tools/getProjectRoot.ts +1 -1
  132. package/src/bin/tools/grant-exec-perms.ts +8 -7
  133. package/src/bin/tools/isInside.ts +2 -9
  134. package/src/bin/tools/rm.ts +21 -32
  135. package/src/bin/tools/transformCodebase.ts +20 -43
  136. package/src/lib/components/Error.tsx +3 -7
  137. package/src/lib/components/Info.tsx +23 -47
  138. package/src/lib/components/KcApp.tsx +25 -13
  139. package/src/lib/components/KcProps.ts +94 -92
  140. package/src/lib/components/Login.tsx +126 -116
  141. package/src/lib/components/LoginIdpLinkConfirm.tsx +38 -53
  142. package/src/lib/components/LoginOtp.tsx +39 -76
  143. package/src/lib/components/LoginResetPassword.tsx +9 -26
  144. package/src/lib/components/LoginUpdateProfile.tsx +104 -117
  145. package/src/lib/components/LoginVerifyEmail.tsx +3 -12
  146. package/src/lib/components/Register.tsx +76 -46
  147. package/src/lib/components/RegisterUserProfile.tsx +201 -0
  148. package/src/lib/components/Template.tsx +109 -161
  149. package/src/lib/components/Terms.tsx +4 -13
  150. package/src/lib/getKcContext/KcContextBase.ts +104 -53
  151. package/src/lib/getKcContext/getKcContext.ts +47 -78
  152. package/src/lib/getKcContext/index.ts +2 -2
  153. package/src/lib/getKcContext/kcContextMocks/index.ts +1 -1
  154. package/src/lib/getKcContext/kcContextMocks/kcContextMocks.ts +362 -241
  155. package/src/lib/getKcContext/kcContextMocks/urlResourcesPath.ts +1 -2
  156. package/src/lib/i18n/KcLanguageTag.ts +34 -45
  157. package/src/lib/i18n/generated_kcMessages/11.0.3/account.ts +3086 -3059
  158. package/src/lib/i18n/generated_kcMessages/11.0.3/admin.ts +248 -239
  159. package/src/lib/i18n/generated_kcMessages/11.0.3/email.ts +848 -633
  160. package/src/lib/i18n/generated_kcMessages/11.0.3/login.ts +4466 -4359
  161. package/src/lib/i18n/generated_kcMessages/15.0.2/account.ts +4247 -4202
  162. package/src/lib/i18n/generated_kcMessages/15.0.2/admin.ts +273 -264
  163. package/src/lib/i18n/generated_kcMessages/15.0.2/email.ts +997 -749
  164. package/src/lib/i18n/generated_kcMessages/15.0.2/login.ts +5352 -5212
  165. package/src/lib/i18n/kcMessages/login.ts +4 -9
  166. package/src/lib/i18n/useKcLanguageTag.ts +2 -16
  167. package/src/lib/i18n/useKcMessage.tsx +17 -20
  168. package/src/lib/index.ts +0 -1
  169. package/src/lib/keycloakJsAdapter.ts +23 -53
  170. package/src/lib/tools/AndByDiscriminatingKey.ts +16 -30
  171. package/src/lib/tools/DeepPartial.ts +1 -2
  172. package/src/lib/tools/ReactComponent.ts +4 -0
  173. package/src/lib/tools/allPropertiesValuesToUndefined.ts +1 -6
  174. package/src/lib/tools/appendHead.ts +28 -25
  175. package/src/lib/tools/assert.ts +1 -2
  176. package/src/lib/tools/deepAssign.ts +28 -46
  177. package/src/lib/tools/deepClone.ts +2 -3
@@ -1,25 +1,30 @@
1
-
2
1
  import type { PageId } from "../../bin/build-keycloak-theme/generateFtl";
3
2
  import type { KcLanguageTag } from "../i18n/KcLanguageTag";
4
- import { doExtends } from "tsafe/doExtends";
3
+ import { assert } from "tsafe/assert";
4
+ import type { Equals } from "tsafe";
5
5
  import type { MessageKey } from "../i18n/useKcMessage";
6
6
  import type { LanguageLabel } from "../i18n/KcLanguageTag";
7
7
 
8
- type ExtractAfterStartingWith<Prefix extends string, StrEnum> =
9
- StrEnum extends `${Prefix}${infer U}` ? U : never;
8
+ type ExtractAfterStartingWith<Prefix extends string, StrEnum> = StrEnum extends `${Prefix}${infer U}` ? U : never;
10
9
 
11
- /** Take theses type definition with a grain of salt.
10
+ /** Take theses type definition with a grain of salt.
12
11
  * Some values might be undefined on some pages.
13
12
  * (ex: url.loginAction is undefined on error.ftl)
14
13
  */
15
14
  export type KcContextBase =
16
- KcContextBase.Login | KcContextBase.Register | KcContextBase.Info |
17
- KcContextBase.Error | KcContextBase.LoginResetPassword | KcContextBase.LoginVerifyEmail |
18
- KcContextBase.Terms | KcContextBase.LoginOtp | KcContextBase.LoginUpdateProfile |
19
- KcContextBase.LoginIdpLinkConfirm;
15
+ | KcContextBase.Login
16
+ | KcContextBase.Register
17
+ | KcContextBase.RegisterUserProfile
18
+ | KcContextBase.Info
19
+ | KcContextBase.Error
20
+ | KcContextBase.LoginResetPassword
21
+ | KcContextBase.LoginVerifyEmail
22
+ | KcContextBase.Terms
23
+ | KcContextBase.LoginOtp
24
+ | KcContextBase.LoginUpdateProfile
25
+ | KcContextBase.LoginIdpLinkConfirm;
20
26
 
21
27
  export declare namespace KcContextBase {
22
-
23
28
  export type Common = {
24
29
  url: {
25
30
  loginAction: string;
@@ -45,7 +50,7 @@ export declare namespace KcContextBase {
45
50
  //label: LanguageLabel;
46
51
  }[];
47
52
  current: LanguageLabel;
48
- },
53
+ };
49
54
  auth?: {
50
55
  showUsername: boolean;
51
56
  showResetCredentials: boolean;
@@ -60,8 +65,14 @@ export declare namespace KcContextBase {
60
65
  client: {
61
66
  clientId: string;
62
67
  name?: string;
63
- }
68
+ };
64
69
  isAppInitiatedAction: boolean;
70
+ messagesPerField: {
71
+ printIfExists: <T>(fieldName: string, x: T) => T | undefined;
72
+ existsError: (fieldName: string) => boolean;
73
+ get: (fieldName: string) => string;
74
+ exists: (fieldName: string) => boolean;
75
+ };
65
76
  };
66
77
 
67
78
  export type Login = Common & {
@@ -93,37 +104,14 @@ export declare namespace KcContextBase {
93
104
  alias: string;
94
105
  providerId: string;
95
106
  displayName: string;
96
- }[]
107
+ }[];
97
108
  };
98
109
  };
99
110
 
100
- export type Register = Common & {
101
- pageId: "register.ftl";
111
+ export type RegisterCommon = Common & {
102
112
  url: {
103
113
  registrationAction: string;
104
114
  };
105
- messagesPerField: {
106
- printIfExists<T>(
107
- key:
108
- "userLabel" |
109
- "username" |
110
- "email" |
111
- "firstName" |
112
- "lastName" |
113
- "password" |
114
- "password-confirm",
115
- x: T
116
- ): T | undefined;
117
- };
118
- register: {
119
- formData: {
120
- firstName?: string;
121
- displayName?: string;
122
- lastName?: string;
123
- email?: string;
124
- username?: string;
125
- }
126
- };
127
115
  passwordRequired: boolean;
128
116
  recaptchaRequired: boolean;
129
117
  recaptchaSiteKey?: string;
@@ -134,7 +122,29 @@ export declare namespace KcContextBase {
134
122
  alias: string;
135
123
  providerId: string;
136
124
  displayName: string;
137
- }[]
125
+ }[];
126
+ };
127
+ };
128
+
129
+ export type Register = RegisterCommon & {
130
+ pageId: "register.ftl";
131
+ register: {
132
+ formData: {
133
+ firstName?: string;
134
+ displayName?: string;
135
+ lastName?: string;
136
+ email?: string;
137
+ username?: string;
138
+ };
139
+ };
140
+ };
141
+
142
+ export type RegisterUserProfile = RegisterCommon & {
143
+ pageId: "register-user-profile.ftl";
144
+ profile: {
145
+ context: "REGISTRATION_PROFILE";
146
+ attributes: Attribute[];
147
+ attributesByName: Record<string, Attribute>;
138
148
  };
139
149
  };
140
150
 
@@ -147,14 +157,14 @@ export declare namespace KcContextBase {
147
157
  actionUri?: string;
148
158
  client: {
149
159
  baseUrl?: string;
150
- }
160
+ };
151
161
  };
152
162
 
153
163
  export type Error = Common & {
154
164
  pageId: "error.ftl";
155
165
  client?: {
156
166
  baseUrl?: string;
157
- },
167
+ };
158
168
  message: NonNullable<Common["message"]>;
159
169
  };
160
170
 
@@ -162,7 +172,7 @@ export declare namespace KcContextBase {
162
172
  pageId: "login-reset-password.ftl";
163
173
  realm: {
164
174
  loginWithEmailAllowed: boolean;
165
- }
175
+ };
166
176
  };
167
177
 
168
178
  export type LoginVerifyEmail = Common & {
@@ -176,8 +186,8 @@ export declare namespace KcContextBase {
176
186
  export type LoginOtp = Common & {
177
187
  pageId: "login-otp.ftl";
178
188
  otpLogin: {
179
- userOtpCredentials: { id: string; userLabel: string; }[];
180
- }
189
+ userOtpCredentials: { id: string; userLabel: string }[];
190
+ };
181
191
  };
182
192
 
183
193
  export type LoginUpdateProfile = Common & {
@@ -189,24 +199,65 @@ export declare namespace KcContextBase {
189
199
  firstName?: string;
190
200
  lastName?: string;
191
201
  };
192
- messagesPerField: {
193
- printIfExists<T>(
194
- key: "username" | "email" | "firstName" | "lastName",
195
- x: T
196
- ): T | undefined;
197
- };
198
-
199
202
  };
200
203
 
201
204
  export type LoginIdpLinkConfirm = Common & {
202
205
  pageId: "login-idp-link-confirm.ftl";
203
206
  idpAlias: string;
204
207
  };
205
-
206
208
  }
207
209
 
208
- doExtends<KcContextBase["pageId"], PageId>();
209
- doExtends<PageId, KcContextBase["pageId"]>();
210
+ export type Attribute = {
211
+ name: string;
212
+ displayName?: string;
213
+ required: boolean;
214
+ value?: string;
215
+ group?: string;
216
+ groupDisplayHeader?: string;
217
+ groupDisplayDescription?: string;
218
+ readOnly: boolean;
219
+ autocomplete?: string;
220
+ validators: Validators;
221
+ annotations: Record<string, string>;
222
+ groupAnnotations: Record<string, string>;
223
+ };
224
+
225
+ export type Validators = Partial<{
226
+ length: Validators.DoIgnoreEmpty & Validators.Range;
227
+ double: Validators.DoIgnoreEmpty & Validators.Range;
228
+ integer: Validators.DoIgnoreEmpty & Validators.Range;
229
+ email: Validators.DoIgnoreEmpty;
230
+ "up-immutable-attribute": {};
231
+ "up-attribute-required-by-metadata-value": {};
232
+ "up-username-has-value": {};
233
+ "up-duplicate-username": {};
234
+ "up-username-mutation": {};
235
+ "up-email-exists-as-username": {};
236
+ "up-blank-attribute-value": Validators.ErrorMessage & {
237
+ "fail-on-null": boolean;
238
+ };
239
+ "up-duplicate-email": {};
240
+ "local-date": Validators.DoIgnoreEmpty;
241
+ pattern: Validators.DoIgnoreEmpty & Validators.ErrorMessage & { pattern: string };
242
+ "person-name-prohibited-characters": Validators.DoIgnoreEmpty & Validators.ErrorMessage;
243
+ uri: Validators.DoIgnoreEmpty;
244
+ "username-prohibited-characters": Validators.DoIgnoreEmpty & Validators.ErrorMessage;
245
+ }>;
246
+
247
+ export declare namespace Validators {
248
+ export type DoIgnoreEmpty = {
249
+ "ignore.empty.value"?: boolean;
250
+ };
210
251
 
252
+ export type ErrorMessage = {
253
+ "error-message"?: string;
254
+ };
211
255
 
256
+ export type Range = {
257
+ /** "0", "1", "2"... yeah I know, don't tell me */
258
+ min?: string;
259
+ max?: string;
260
+ };
261
+ }
212
262
 
263
+ assert<Equals<KcContextBase["pageId"], PageId>>();
@@ -1,4 +1,3 @@
1
-
2
1
  import type { KcContextBase } from "./KcContextBase";
3
2
  import { kcContextMocks, kcContextCommonMock } from "./kcContextMocks";
4
3
  import { ftlValuesGlobalName } from "../../bin/build-keycloak-theme/ftlValuesGlobalName";
@@ -6,81 +5,51 @@ import type { AndByDiscriminatingKey } from "../tools/AndByDiscriminatingKey";
6
5
  import type { DeepPartial } from "../tools/DeepPartial";
7
6
  import { deepAssign } from "../tools/deepAssign";
8
7
 
9
-
10
- export type ExtendsKcContextBase<
11
- KcContextExtended extends { pageId: string; }
12
- > =
13
- [KcContextExtended] extends [never] ?
14
- KcContextBase :
15
- AndByDiscriminatingKey<
16
- "pageId",
17
- KcContextExtended & KcContextBase.Common,
18
- KcContextBase
19
- >;
20
-
21
- export function getKcContext<KcContextExtended extends { pageId: string; } = never>(
22
- params?: {
23
- mockPageId?: ExtendsKcContextBase<KcContextExtended>["pageId"];
24
- mockData?: readonly DeepPartial<ExtendsKcContextBase<KcContextExtended>>[];
25
- }
26
- ): { kcContext: ExtendsKcContextBase<KcContextExtended> | undefined; } {
27
-
28
- const {
29
- mockPageId,
30
- mockData
31
- } = params ?? {};
32
-
33
- if (mockPageId !== undefined) {
34
-
35
- //TODO maybe trow if no mock fo custom page
36
-
37
- const kcContextDefaultMock = kcContextMocks.find(({ pageId }) => pageId === mockPageId);
38
-
39
- const partialKcContextCustomMock = mockData?.find(({ pageId }) => pageId === mockPageId);
40
-
41
- if (
42
- kcContextDefaultMock === undefined &&
43
- partialKcContextCustomMock === undefined
44
- ) {
45
-
46
- console.warn([
47
- `WARNING: You declared the non build in page ${mockPageId} but you didn't `,
48
- `provide mock data needed to debug the page outside of Keycloak as you are trying to do now.`,
49
- `Please check the documentation of the getKcContext function`
50
- ].join("\n"));
51
-
52
- }
53
-
54
- const kcContext: any = {};
55
-
56
- deepAssign({
57
- "target": kcContext,
58
- "source": kcContextDefaultMock !== undefined ?
59
- kcContextDefaultMock :
60
- { "pageId": mockPageId, ...kcContextCommonMock, }
61
- });
62
-
63
- if (partialKcContextCustomMock !== undefined) {
64
-
65
- deepAssign({
66
- "target": kcContext,
67
- "source": partialKcContextCustomMock
68
- });
69
-
70
- }
71
-
72
- return { kcContext };
73
-
74
- }
75
-
76
- return {
77
- "kcContext":
78
- typeof window === "undefined" ?
79
- undefined :
80
- (window as any)[ftlValuesGlobalName]
81
- };
82
-
8
+ export type ExtendsKcContextBase<KcContextExtended extends { pageId: string }> = [KcContextExtended] extends [never]
9
+ ? KcContextBase
10
+ : AndByDiscriminatingKey<"pageId", KcContextExtended & KcContextBase.Common, KcContextBase>;
11
+
12
+ export function getKcContext<KcContextExtended extends { pageId: string } = never>(params?: {
13
+ mockPageId?: ExtendsKcContextBase<KcContextExtended>["pageId"];
14
+ mockData?: readonly DeepPartial<ExtendsKcContextBase<KcContextExtended>>[];
15
+ }): { kcContext: ExtendsKcContextBase<KcContextExtended> | undefined } {
16
+ const { mockPageId, mockData } = params ?? {};
17
+
18
+ if (mockPageId !== undefined) {
19
+ //TODO maybe trow if no mock fo custom page
20
+
21
+ const kcContextDefaultMock = kcContextMocks.find(({ pageId }) => pageId === mockPageId);
22
+
23
+ const partialKcContextCustomMock = mockData?.find(({ pageId }) => pageId === mockPageId);
24
+
25
+ if (kcContextDefaultMock === undefined && partialKcContextCustomMock === undefined) {
26
+ console.warn(
27
+ [
28
+ `WARNING: You declared the non build in page ${mockPageId} but you didn't `,
29
+ `provide mock data needed to debug the page outside of Keycloak as you are trying to do now.`,
30
+ `Please check the documentation of the getKcContext function`,
31
+ ].join("\n"),
32
+ );
33
+ }
34
+
35
+ const kcContext: any = {};
36
+
37
+ deepAssign({
38
+ "target": kcContext,
39
+ "source": kcContextDefaultMock !== undefined ? kcContextDefaultMock : { "pageId": mockPageId, ...kcContextCommonMock },
40
+ });
41
+
42
+ if (partialKcContextCustomMock !== undefined) {
43
+ deepAssign({
44
+ "target": kcContext,
45
+ "source": partialKcContextCustomMock,
46
+ });
47
+ }
48
+
49
+ return { kcContext };
50
+ }
51
+
52
+ return {
53
+ "kcContext": typeof window === "undefined" ? undefined : (window as any)[ftlValuesGlobalName],
54
+ };
83
55
  }
84
-
85
-
86
-
@@ -1,2 +1,2 @@
1
- export type { KcContextBase } from "./KcContextBase";
2
- export { getKcContext } from "./getKcContext";
1
+ export type { KcContextBase } from "./KcContextBase";
2
+ export { getKcContext } from "./getKcContext";
@@ -1 +1 @@
1
- export * from "./kcContextMocks";
1
+ export * from "./kcContextMocks";