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,4 +1,3 @@
1
-
2
1
  import { kcMessages } from "../generated_kcMessages/15.0.2/login";
3
2
  import { Evt } from "evt";
4
3
  import { objectKeys } from "tsafe/objectKeys";
@@ -11,7 +10,6 @@ export const evtTermsUpdated = Evt.asNonPostable(Evt.create<void>());
11
10
  kcMessages[kcLanguage],
12
11
  key,
13
12
  (() => {
14
-
15
13
  let value = key === "termsText" ? "⏳" : kcMessages[kcLanguage][key];
16
14
 
17
15
  return {
@@ -20,14 +18,11 @@ export const evtTermsUpdated = Evt.asNonPostable(Evt.create<void>());
20
18
  "set": (newValue: string) => {
21
19
  value = newValue;
22
20
  Evt.asPostable(evtTermsUpdated).post();
23
- }
21
+ },
24
22
  };
25
-
26
-
27
- })()
28
- )
29
- )
23
+ })(),
24
+ ),
25
+ ),
30
26
  );
31
27
 
32
28
  export { kcMessages };
33
-
@@ -1,35 +1,24 @@
1
-
2
1
  import { createUseGlobalState } from "powerhooks/useGlobalState";
3
2
  import { getKcContext } from "../getKcContext";
4
3
  import { getBestMatchAmongKcLanguageTag } from "./KcLanguageTag";
5
4
  import type { StatefulEvt } from "powerhooks";
6
5
  import { KcLanguageTag } from "./KcLanguageTag";
7
6
 
8
-
9
7
  //export const { useKcLanguageTag, evtKcLanguageTag } = createUseGlobalState(
10
8
  const wrap = createUseGlobalState(
11
9
  "kcLanguageTag",
12
10
  () => {
13
-
14
-
15
11
  const { kcContext } = getKcContext();
16
12
 
17
- const languageLike =
18
- kcContext?.locale?.current ??
19
- (
20
- typeof navigator === "undefined" ?
21
- undefined :
22
- navigator.language
23
- );
13
+ const languageLike = kcContext?.locale?.current ?? (typeof navigator === "undefined" ? undefined : navigator.language);
24
14
 
25
15
  if (languageLike === undefined) {
26
16
  return "en";
27
17
  }
28
18
 
29
19
  return getBestMatchAmongKcLanguageTag(languageLike);
30
-
31
20
  },
32
- { "persistance": "localStorage" }
21
+ { "persistance": "localStorage" },
33
22
  );
34
23
 
35
24
  export const { useKcLanguageTag } = wrap;
@@ -37,6 +26,3 @@ export const { useKcLanguageTag } = wrap;
37
26
  export function getEvtKcLanguage(): StatefulEvt<KcLanguageTag> {
38
27
  return wrap.evtKcLanguageTag;
39
28
  }
40
-
41
-
42
-
@@ -1,14 +1,16 @@
1
-
2
1
  import { useCallback, useReducer } from "react";
3
2
  import { useKcLanguageTag } from "./useKcLanguageTag";
4
3
  import { kcMessages, evtTermsUpdated } from "./kcMessages/login";
5
4
  import { useEvt } from "evt/hooks";
6
5
  //NOTE for later: https://github.com/remarkjs/react-markdown/blob/236182ecf30bd89c1e5a7652acaf8d0bf81e6170/src/renderers.js#L7-L35
7
6
  import ReactMarkdown from "react-markdown";
7
+ import { id } from "tsafe/id";
8
+
9
+ export { kcMessages };
8
10
 
9
11
  export type MessageKey = keyof typeof kcMessages["en"];
10
12
 
11
- /**
13
+ /**
12
14
  * When the language is switched the page is reloaded, this may appear
13
15
  * as a bug as you might notice that the language successfully switch before
14
16
  * reload.
@@ -16,7 +18,6 @@ export type MessageKey = keyof typeof kcMessages["en"];
16
18
  * during login so we can retrieve the "local" field of the JWT encoded accessToken.
17
19
  */
18
20
  export function useKcMessage() {
19
-
20
21
  const { kcLanguageTag } = useKcLanguageTag();
21
22
 
22
23
  const [trigger, forceUpdate] = useReducer((counter: number) => counter + 1, 0);
@@ -25,48 +26,44 @@ export function useKcMessage() {
25
26
 
26
27
  const msgStr = useCallback(
27
28
  (key: MessageKey, ...args: (string | undefined)[]): string => {
28
-
29
29
  let str: string = kcMessages[kcLanguageTag as any as "en"][key] ?? kcMessages["en"][key];
30
30
 
31
31
  args.forEach((arg, i) => {
32
-
33
32
  if (arg === undefined) {
34
33
  return;
35
34
  }
36
35
 
37
36
  str = str.replace(new RegExp(`\\{${i}\\}`, "g"), arg);
38
-
39
37
  });
40
38
 
41
39
  return str;
42
-
43
40
  },
44
- [kcLanguageTag, trigger]
41
+ [kcLanguageTag, trigger],
45
42
  );
46
43
 
47
44
  const msg = useCallback<(...args: Parameters<typeof msgStr>) => JSX.Element>(
48
- (key, ...args) =>
45
+ (key, ...args) => (
49
46
  <ReactMarkdown allowDangerousHtml renderers={key === "termsText" ? undefined : { "paragraph": "span" }}>
50
47
  {msgStr(key, ...args)}
51
- </ReactMarkdown>,
52
- [msgStr]
48
+ </ReactMarkdown>
49
+ ),
50
+ [msgStr],
53
51
  );
54
52
 
55
53
  const advancedMsg = useCallback(
56
- (key: string): string => {
57
-
54
+ (key: string): string | undefined => {
58
55
  const match = key.match(/^\$\{([^{]+)\}$/);
59
56
 
60
- if( match === null ){
61
- return key;
62
- }
57
+ const resolvedKey = match === null ? key : match[1];
63
58
 
64
- return msgStr(match[1] as MessageKey);
59
+ const out =
60
+ id<Record<string, string | undefined>>(kcMessages[kcLanguageTag])[resolvedKey] ??
61
+ id<Record<string, string | undefined>>(kcMessages["en"])[resolvedKey];
65
62
 
63
+ return out !== undefined ? out : match === null ? key : undefined;
66
64
  },
67
- [msgStr]
65
+ [msgStr],
68
66
  );
69
67
 
70
68
  return { msg, msgStr, advancedMsg };
71
-
72
- }
69
+ }
package/src/lib/index.ts CHANGED
@@ -16,4 +16,3 @@ export * from "./components/LoginVerifyEmail";
16
16
  export * from "./keycloakJsAdapter";
17
17
 
18
18
  export * from "./tools/assert";
19
-
@@ -1,7 +1,4 @@
1
-
2
-
3
1
  export declare namespace keycloak_js {
4
-
5
2
  export type KeycloakPromiseCallback<T> = (result: T) => void;
6
3
  export class KeycloakPromise<TSuccess, TError> extends Promise<TSuccess> {
7
4
  success(callback: KeycloakPromiseCallback<TSuccess>): KeycloakPromise<TSuccess, TError>;
@@ -12,7 +9,7 @@ export declare namespace keycloak_js {
12
9
  logout(options?: KeycloakLogoutOptions): KeycloakPromise<void, void>;
13
10
  register(options?: KeycloakLoginOptions): KeycloakPromise<void, void>;
14
11
  accountManagement(): KeycloakPromise<void, void>;
15
- redirectUri(options: { redirectUri: string; }, encodeHash: boolean): string;
12
+ redirectUri(options: { redirectUri: string }, encodeHash: boolean): string;
16
13
  }
17
14
  export interface KeycloakLogoutOptions {
18
15
  redirectUri?: string;
@@ -20,7 +17,7 @@ export declare namespace keycloak_js {
20
17
  export interface KeycloakLoginOptions {
21
18
  scope?: string;
22
19
  redirectUri?: string;
23
- prompt?: 'none' | 'login';
20
+ prompt?: "none" | "login";
24
21
  action?: string;
25
22
  maxAge?: number;
26
23
  loginHint?: string;
@@ -30,73 +27,48 @@ export declare namespace keycloak_js {
30
27
  }
31
28
 
32
29
  export type KeycloakInstance = Record<
33
- "createLoginUrl" |
34
- "createLogoutUrl" |
35
- "createRegisterUrl",
30
+ "createLoginUrl" | "createLogoutUrl" | "createRegisterUrl",
36
31
  (options: KeycloakLoginOptions | undefined) => string
37
32
  > & {
38
33
  createAccountUrl(): string;
39
34
  redirectUri?: string;
40
- }
41
-
35
+ };
42
36
  }
43
37
 
44
38
  /**
45
- * NOTE: This is just a slightly modified version of the default adapter in keycloak-js
46
- * The goal here is just to be able to inject search param in url before keycloak redirect.
47
- * Our use case for it is to pass over the login screen the states of useGlobalState
48
- * namely isDarkModeEnabled, lgn...
49
- */
50
- export function createKeycloakAdapter(
51
- params: {
52
- keycloakInstance: keycloak_js.KeycloakInstance;
53
- transformUrlBeforeRedirect(url: string): string;
54
- }
55
- ): keycloak_js.KeycloakAdapter {
56
-
39
+ * NOTE: This is just a slightly modified version of the default adapter in keycloak-js
40
+ * The goal here is just to be able to inject search param in url before keycloak redirect.
41
+ * Our use case for it is to pass over the login screen the states of useGlobalState
42
+ * namely isDarkModeEnabled, lgn...
43
+ */
44
+ export function createKeycloakAdapter(params: {
45
+ keycloakInstance: keycloak_js.KeycloakInstance;
46
+ transformUrlBeforeRedirect(url: string): string;
47
+ }): keycloak_js.KeycloakAdapter {
57
48
  const { keycloakInstance, transformUrlBeforeRedirect } = params;
58
49
 
59
- const neverResolvingPromise: keycloak_js.KeycloakPromise<void, void> = Object.defineProperties(
60
- new Promise(() => { }),
61
- {
62
- "success": { "value": () => { } },
63
- "error": { "value": () => { } }
64
- }
65
- ) as any;
50
+ const neverResolvingPromise: keycloak_js.KeycloakPromise<void, void> = Object.defineProperties(new Promise(() => {}), {
51
+ "success": { "value": () => {} },
52
+ "error": { "value": () => {} },
53
+ }) as any;
66
54
 
67
55
  return {
68
56
  "login": options => {
69
- window.location.href=
70
- transformUrlBeforeRedirect(
71
- keycloakInstance.createLoginUrl(
72
- options
73
- )
74
- );
57
+ window.location.href = transformUrlBeforeRedirect(keycloakInstance.createLoginUrl(options));
75
58
  return neverResolvingPromise;
76
59
  },
77
60
  "logout": options => {
78
- window.location.replace(
79
- transformUrlBeforeRedirect(
80
- keycloakInstance.createLogoutUrl(
81
- options
82
- )
83
- )
84
- );
61
+ window.location.replace(transformUrlBeforeRedirect(keycloakInstance.createLogoutUrl(options)));
85
62
  return neverResolvingPromise;
86
63
  },
87
64
  "register": options => {
88
- window.location.href =
89
- transformUrlBeforeRedirect(
90
- keycloakInstance.createRegisterUrl(
91
- options
92
- )
93
- );
65
+ window.location.href = transformUrlBeforeRedirect(keycloakInstance.createRegisterUrl(options));
94
66
 
95
67
  return neverResolvingPromise;
96
68
  },
97
69
  "accountManagement": () => {
98
70
  var accountUrl = transformUrlBeforeRedirect(keycloakInstance.createAccountUrl());
99
- if (typeof accountUrl !== 'undefined') {
71
+ if (typeof accountUrl !== "undefined") {
100
72
  window.location.href = accountUrl;
101
73
  } else {
102
74
  throw new Error("Not supported by the OIDC server");
@@ -111,8 +83,6 @@ export function createKeycloakAdapter(
111
83
  } else {
112
84
  return window.location.href;
113
85
  }
114
- }
86
+ },
115
87
  };
116
-
117
-
118
- }
88
+ }
@@ -1,35 +1,21 @@
1
-
2
1
  export type AndByDiscriminatingKey<
3
- DiscriminatingKey extends string,
4
- U1 extends Record<DiscriminatingKey, string>,
5
- U2 extends Record<DiscriminatingKey, string>
6
- > =
7
- AndByDiscriminatingKey.Tf1<DiscriminatingKey, U1, U1, U2>;
2
+ DiscriminatingKey extends string,
3
+ U1 extends Record<DiscriminatingKey, string>,
4
+ U2 extends Record<DiscriminatingKey, string>,
5
+ > = AndByDiscriminatingKey.Tf1<DiscriminatingKey, U1, U1, U2>;
8
6
 
9
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
+ > = U1 extends Pick<U2, DiscriminatingKey> ? Tf2<DiscriminatingKey, U1, U2, U1Again> : U1;
10
14
 
11
- export type Tf1<
12
- DiscriminatingKey extends string,
13
- U1,
14
- U1Again extends Record<DiscriminatingKey, string>,
15
- U2 extends Record<DiscriminatingKey, string>
16
- > =
17
- U1 extends Pick<U2, DiscriminatingKey> ?
18
- Tf2<DiscriminatingKey, U1, U2, U1Again> :
19
- U1;
20
-
21
- export type Tf2<
22
- DiscriminatingKey extends string,
23
- SingletonU1 extends Record<DiscriminatingKey, string>,
24
- U2,
25
- U1 extends Record<DiscriminatingKey, string>
26
- > =
27
- U2 extends Pick<SingletonU1, DiscriminatingKey> ?
28
- U2 & SingletonU1 :
29
- U2 extends Pick<U1, DiscriminatingKey> ?
30
- never :
31
- U2;
32
-
15
+ export type Tf2<
16
+ DiscriminatingKey extends string,
17
+ SingletonU1 extends Record<DiscriminatingKey, string>,
18
+ U2,
19
+ U1 extends Record<DiscriminatingKey, string>,
20
+ > = U2 extends Pick<SingletonU1, DiscriminatingKey> ? U2 & SingletonU1 : U2 extends Pick<U1, DiscriminatingKey> ? never : U2;
33
21
  }
34
-
35
-
@@ -1,4 +1,3 @@
1
-
2
1
  export type DeepPartial<T> = {
3
2
  [P in keyof T]?: DeepPartial<T[P]>;
4
- };
3
+ };
@@ -0,0 +1,4 @@
1
+ /* eslint-disable @typescript-eslint/ban-types */
2
+ import type { FC, ComponentClass } from "react";
3
+
4
+ export type ReactComponent<Props extends Record<string, unknown> = {}> = ((props: Props) => ReturnType<FC>) | ComponentClass<Props>;
@@ -1,10 +1,5 @@
1
-
2
-
3
1
  import "minimal-polyfills/Object.fromEntries";
4
2
 
5
3
  export function allPropertiesValuesToUndefined<T extends Record<string, unknown>>(obj: T): Record<keyof T, undefined> {
6
- return Object.fromEntries(
7
- Object.entries(obj)
8
- .map(([key]) => [key, undefined])
9
- ) as any;
4
+ return Object.fromEntries(Object.entries(obj).map(([key]) => [key, undefined])) as any;
10
5
  }
@@ -1,23 +1,25 @@
1
-
2
1
  import { Deferred } from "evt/tools/Deferred";
3
2
 
4
3
  export function appendHead(
5
- params: {
6
- type: "css";
7
- href: string;
8
- } | {
9
- type: "javascript";
10
- src: string;
11
- }
4
+ params:
5
+ | {
6
+ type: "css";
7
+ href: string;
8
+ }
9
+ | {
10
+ type: "javascript";
11
+ src: string;
12
+ },
12
13
  ) {
13
-
14
14
  const htmlElement = document.createElement(
15
15
  (() => {
16
16
  switch (params.type) {
17
- case "css": return "link";
18
- case "javascript": return "script";
17
+ case "css":
18
+ return "link";
19
+ case "javascript":
20
+ return "script";
19
21
  }
20
- })()
22
+ })(),
21
23
  );
22
24
 
23
25
  const dLoaded = new Deferred<void>();
@@ -28,22 +30,23 @@ export function appendHead(
28
30
  htmlElement,
29
31
  (() => {
30
32
  switch (params.type) {
31
- case "css": return {
32
- "href": params.href,
33
- "type": "text/css",
34
- "rel": "stylesheet",
35
- "media": "screen,print"
36
- };
37
- case "javascript": return {
38
- "src": params.src,
39
- "type": "text/javascript",
40
- };
33
+ case "css":
34
+ return {
35
+ "href": params.href,
36
+ "type": "text/css",
37
+ "rel": "stylesheet",
38
+ "media": "screen,print",
39
+ };
40
+ case "javascript":
41
+ return {
42
+ "src": params.src,
43
+ "type": "text/javascript",
44
+ };
41
45
  }
42
- })()
46
+ })(),
43
47
  );
44
48
 
45
49
  document.getElementsByTagName("head")[0].appendChild(htmlElement);
46
50
 
47
51
  return dLoaded.pr;
48
-
49
- }
52
+ }
@@ -1,2 +1 @@
1
-
2
- export { assert } from "tsafe/assert";
1
+ export { assert } from "tsafe/assert";
@@ -1,59 +1,41 @@
1
-
2
1
  import { assert } from "tsafe/assert";
3
2
  import { is } from "tsafe/is";
4
3
 
5
4
  //Warning: Be mindful that because of array this is not idempotent.
6
- export function deepAssign(
7
- params: {
8
- target: Record<string, unknown>;
9
- source: Record<string, unknown>;
10
- }
11
- ) {
12
-
13
- const { target, source } = params;
14
-
15
- Object.keys(source).forEach(key => {
16
- var dereferencedSource = source[key];
17
-
18
- if (
19
- target[key] === undefined ||
20
- !(dereferencedSource instanceof Object)
21
- ) {
22
-
23
- Object.defineProperty(
24
- target,
25
- key,
26
- {
27
- "enumerable": true,
28
- "writable": true,
29
- "configurable": true,
30
- "value": dereferencedSource
31
- }
32
- );
33
-
34
- return;
35
- }
5
+ export function deepAssign(params: { target: Record<string, unknown>; source: Record<string, unknown> }) {
6
+ const { target, source } = params;
36
7
 
37
- const dereferencedTarget = target[key];
8
+ Object.keys(source).forEach(key => {
9
+ var dereferencedSource = source[key];
38
10
 
39
- if (dereferencedSource instanceof Array) {
11
+ if (target[key] === undefined || !(dereferencedSource instanceof Object)) {
12
+ Object.defineProperty(target, key, {
13
+ "enumerable": true,
14
+ "writable": true,
15
+ "configurable": true,
16
+ "value": dereferencedSource,
17
+ });
40
18
 
41
- assert(is<unknown[]>(dereferencedTarget));
42
- assert(is<unknown[]>(dereferencedSource));
19
+ return;
20
+ }
43
21
 
44
- dereferencedSource.forEach(entry => dereferencedTarget.push(entry));
22
+ const dereferencedTarget = target[key];
45
23
 
46
- return;
47
- }
24
+ if (dereferencedSource instanceof Array) {
25
+ assert(is<unknown[]>(dereferencedTarget));
26
+ assert(is<unknown[]>(dereferencedSource));
48
27
 
49
- assert(is<Record<string, unknown>>(dereferencedTarget));
50
- assert(is<Record<string, unknown>>(dereferencedSource));
28
+ dereferencedSource.forEach(entry => dereferencedTarget.push(entry));
51
29
 
52
- deepAssign({
53
- "target": dereferencedTarget,
54
- "source": dereferencedSource
55
- });
30
+ return;
31
+ }
56
32
 
57
- });
33
+ assert(is<Record<string, unknown>>(dereferencedTarget));
34
+ assert(is<Record<string, unknown>>(dereferencedSource));
58
35
 
59
- }
36
+ deepAssign({
37
+ "target": dereferencedTarget,
38
+ "source": dereferencedSource,
39
+ });
40
+ });
41
+ }
@@ -1,4 +1,3 @@
1
-
2
1
  export function deepClone<T>(arg: T): T {
3
- return JSON.parse(JSON.stringify(arg));
4
- }
2
+ return JSON.parse(JSON.stringify(arg));
3
+ }