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,74 +1,66 @@
1
-
2
-
3
1
  import cheerio from "cheerio";
4
- import {
5
- replaceImportsFromStaticInJsCode,
6
- replaceImportsInInlineCssCode,
7
- generateCssCodeToDefineGlobals
8
- } from "../replaceImportFromStatic";
2
+ import { replaceImportsFromStaticInJsCode, replaceImportsInInlineCssCode, generateCssCodeToDefineGlobals } from "../replaceImportFromStatic";
9
3
  import fs from "fs";
10
4
  import { join as pathJoin } from "path";
11
5
  import { objectKeys } from "tsafe/objectKeys";
12
6
  import { ftlValuesGlobalName } from "../ftlValuesGlobalName";
13
7
 
14
8
  export const pageIds = [
15
- "login.ftl", "register.ftl", "info.ftl",
16
- "error.ftl", "login-reset-password.ftl",
17
- "login-verify-email.ftl", "terms.ftl",
18
- "login-otp.ftl", "login-update-profile.ftl",
19
- "login-idp-link-confirm.ftl"
9
+ "login.ftl",
10
+ "register.ftl",
11
+ "register-user-profile.ftl",
12
+ "info.ftl",
13
+ "error.ftl",
14
+ "login-reset-password.ftl",
15
+ "login-verify-email.ftl",
16
+ "terms.ftl",
17
+ "login-otp.ftl",
18
+ "login-update-profile.ftl",
19
+ "login-idp-link-confirm.ftl",
20
20
  ] as const;
21
21
 
22
22
  export type PageId = typeof pageIds[number];
23
23
 
24
24
  function loadAdjacentFile(fileBasename: string) {
25
- return fs.readFileSync(pathJoin(__dirname, fileBasename))
26
- .toString("utf8");
27
- };
28
-
29
-
30
- export function generateFtlFilesCodeFactory(
31
- params: {
32
- cssGlobalsToDefine: Record<string, string>;
33
- indexHtmlCode: string;
34
- urlPathname: string;
35
- urlOrigin: undefined | string;
36
- }
37
- ) {
38
-
25
+ return fs.readFileSync(pathJoin(__dirname, fileBasename)).toString("utf8");
26
+ }
27
+
28
+ export function generateFtlFilesCodeFactory(params: {
29
+ cssGlobalsToDefine: Record<string, string>;
30
+ indexHtmlCode: string;
31
+ urlPathname: string;
32
+ urlOrigin: undefined | string;
33
+ }) {
39
34
  const { cssGlobalsToDefine, indexHtmlCode, urlPathname, urlOrigin } = params;
40
35
 
41
36
  const $ = cheerio.load(indexHtmlCode);
42
37
 
43
38
  $("script:not([src])").each((...[, element]) => {
44
-
45
39
  const { fixedJsCode } = replaceImportsFromStaticInJsCode({
46
40
  "jsCode": $(element).html()!,
47
- urlOrigin
41
+ urlOrigin,
48
42
  });
49
43
 
50
44
  $(element).text(fixedJsCode);
51
-
52
45
  });
53
46
 
54
47
  $("style").each((...[, element]) => {
55
-
56
48
  const { fixedCssCode } = replaceImportsInInlineCssCode({
57
49
  "cssCode": $(element).html()!,
58
50
  "urlPathname": params.urlPathname,
59
- urlOrigin
51
+ urlOrigin,
60
52
  });
61
53
 
62
54
  $(element).text(fixedCssCode);
63
-
64
55
  });
65
56
 
66
- ([
67
- ["link", "href"],
68
- ["script", "src"],
69
- ] as const).forEach(([selector, attrName]) =>
57
+ (
58
+ [
59
+ ["link", "href"],
60
+ ["script", "src"],
61
+ ] as const
62
+ ).forEach(([selector, attrName]) =>
70
63
  $(selector).each((...[, element]) => {
71
-
72
64
  const href = $(element).attr(attrName);
73
65
 
74
66
  if (href === undefined) {
@@ -77,94 +69,82 @@ export function generateFtlFilesCodeFactory(
77
69
 
78
70
  $(element).attr(
79
71
  attrName,
80
- urlOrigin !== undefined ?
81
- href.replace(/^\//, `${urlOrigin}/`) :
82
- href.replace(
83
- new RegExp(`^${urlPathname.replace(/\//g, "\\/")}`),
84
- "${url.resourcesPath}/build/"
85
- )
72
+ urlOrigin !== undefined
73
+ ? href.replace(/^\//, `${urlOrigin}/`)
74
+ : href.replace(new RegExp(`^${urlPathname.replace(/\//g, "\\/")}`), "${url.resourcesPath}/build/"),
86
75
  );
87
-
88
- })
76
+ }),
89
77
  );
90
78
 
91
79
  //FTL is no valid html, we can't insert with cheerio, we put placeholder for injecting later.
92
80
  const ftlPlaceholders = {
93
- '{ "x": "vIdLqMeOed9sdLdIdOxdK0d" }': loadAdjacentFile("common.ftl")
94
- .match(/^<script>const _=((?:.|\n)+)<\/script>[\n]?$/)![1],
95
- '<!-- xIdLqMeOedErIdLsPdNdI9dSlxI -->':
96
- [
97
- '<#if scripts??>',
98
- ' <#list scripts as script>',
99
- ' <script src="${script}" type="text/javascript"></script>',
100
- ' </#list>',
101
- '</#if>'
102
- ].join("\n")
81
+ '{ "x": "vIdLqMeOed9sdLdIdOxdK0d" }': loadAdjacentFile("common.ftl").match(/^<script>const _=((?:.|\n)+)<\/script>[\n]?$/)![1],
82
+ "<!-- xIdLqMeOedErIdLsPdNdI9dSlxI -->": [
83
+ "<#if scripts??>",
84
+ " <#list scripts as script>",
85
+ ' <script src="${script}" type="text/javascript"></script>',
86
+ " </#list>",
87
+ "</#if>",
88
+ ].join("\n"),
103
89
  };
104
90
 
105
91
  const pageSpecificCodePlaceholder = "<!-- dIddLqMeOedErIdLsPdNdI9dSl42sw -->";
106
92
 
107
93
  $("head").prepend(
108
94
  [
109
- ...(Object.keys(cssGlobalsToDefine).length === 0 ? [] : [
110
- '',
111
- '<style>',
112
- generateCssCodeToDefineGlobals({
113
- cssGlobalsToDefine,
114
- urlPathname
115
- }).cssCodeToPrependInHead,
116
- '</style>',
117
- ''
118
- ]),
95
+ ...(Object.keys(cssGlobalsToDefine).length === 0
96
+ ? []
97
+ : [
98
+ "",
99
+ "<style>",
100
+ generateCssCodeToDefineGlobals({
101
+ cssGlobalsToDefine,
102
+ urlPathname,
103
+ }).cssCodeToPrependInHead,
104
+ "</style>",
105
+ "",
106
+ ]),
119
107
  "<script>",
120
108
  loadAdjacentFile("Object.deepAssign.js"),
121
109
  "</script>",
122
- '<script>',
110
+ "<script>",
123
111
  ` window.${ftlValuesGlobalName}= Object.assign(`,
124
112
  ` {},`,
125
113
  ` ${objectKeys(ftlPlaceholders)[0]}`,
126
- ' );',
127
- '</script>',
128
- '',
114
+ " );",
115
+ "</script>",
116
+ "",
129
117
  pageSpecificCodePlaceholder,
130
- '',
131
- objectKeys(ftlPlaceholders)[1]
118
+ "",
119
+ objectKeys(ftlPlaceholders)[1],
132
120
  ].join("\n"),
133
121
  );
134
122
 
135
123
  const partiallyFixedIndexHtmlCode = $.html();
136
124
 
137
- function generateFtlFilesCode(
138
- params: {
139
- pageId: string;
140
- }
141
- ): { ftlCode: string; } {
142
-
125
+ function generateFtlFilesCode(params: { pageId: string }): {
126
+ ftlCode: string;
127
+ } {
143
128
  const { pageId } = params;
144
129
 
145
130
  const $ = cheerio.load(partiallyFixedIndexHtmlCode);
146
131
 
147
- let ftlCode = $.html()
148
- .replace(
149
- pageSpecificCodePlaceholder,
150
- [
151
- '<script>',
152
- ` Object.deepAssign(`,
153
- ` window.${ftlValuesGlobalName},`,
154
- ` { "pageId": "${pageId}" }`,
155
- ' );',
156
- '</script>'
157
- ].join("\n")
158
- );
132
+ let ftlCode = $.html().replace(
133
+ pageSpecificCodePlaceholder,
134
+ [
135
+ "<script>",
136
+ ` Object.deepAssign(`,
137
+ ` window.${ftlValuesGlobalName},`,
138
+ ` { "pageId": "${pageId}" }`,
139
+ " );",
140
+ "</script>",
141
+ ].join("\n"),
142
+ );
159
143
 
160
- objectKeys(ftlPlaceholders)
161
- .forEach(id => ftlCode = ftlCode.replace(id, ftlPlaceholders[id]));
144
+ objectKeys(ftlPlaceholders).forEach(id => (ftlCode = ftlCode.replace(id, ftlPlaceholders[id])));
162
145
 
163
146
  return { ftlCode };
164
-
165
147
  }
166
148
 
167
149
  return { generateFtlFilesCode };
168
-
169
-
170
- }
150
+ }
@@ -1 +1 @@
1
- export * from "./generateFtl";
1
+ export * from "./generateFtl";
@@ -1,39 +1,29 @@
1
-
2
1
  import * as url from "url";
3
2
  import * as fs from "fs";
4
3
  import { join as pathJoin, dirname as pathDirname } from "path";
5
4
 
6
-
7
- export function generateJavaStackFiles(
8
- params: {
9
- version: string;
10
- themeName: string;
11
- homepage?: string;
12
- keycloakThemeBuildingDirPath: string;
13
- }
14
- ): { jarFilePath: string; } {
15
-
16
- const {
17
- themeName,
18
- version,
19
- homepage,
20
- keycloakThemeBuildingDirPath
21
- } = params;
5
+ export function generateJavaStackFiles(params: { version: string; themeName: string; homepage?: string; keycloakThemeBuildingDirPath: string }): {
6
+ jarFilePath: string;
7
+ } {
8
+ const { themeName, version, homepage, keycloakThemeBuildingDirPath } = params;
22
9
 
23
10
  {
24
-
25
- const { pomFileCode } = (function generatePomFileCode(): { pomFileCode: string; } {
26
-
27
-
11
+ const { pomFileCode } = (function generatePomFileCode(): {
12
+ pomFileCode: string;
13
+ } {
28
14
  const groupId = (() => {
29
-
30
15
  const fallbackGroupId = `there.was.no.homepage.field.in.the.package.json.${themeName}`;
31
16
 
32
- return (!homepage ?
33
- fallbackGroupId :
34
- url.parse(homepage).host?.replace(/:[0-9]+$/,"")?.split(".").reverse().join(".") ?? fallbackGroupId
35
- ) + ".keycloak";
36
-
17
+ return (
18
+ (!homepage
19
+ ? fallbackGroupId
20
+ : url
21
+ .parse(homepage)
22
+ .host?.replace(/:[0-9]+$/, "")
23
+ ?.split(".")
24
+ .reverse()
25
+ .join(".") ?? fallbackGroupId) + ".keycloak"
26
+ );
37
27
  })();
38
28
 
39
29
  const artefactId = `${themeName}-keycloak-theme`;
@@ -49,51 +39,43 @@ export function generateJavaStackFiles(
49
39
  ` <version>${version}</version>`,
50
40
  ` <name>${artefactId}</name>`,
51
41
  ` <description />`,
52
- `</project>`
42
+ `</project>`,
53
43
  ].join("\n");
54
44
 
55
45
  return { pomFileCode };
56
-
57
46
  })();
58
47
 
59
- fs.writeFileSync(
60
- pathJoin(keycloakThemeBuildingDirPath, "pom.xml"),
61
- Buffer.from(pomFileCode, "utf8")
62
- );
63
-
48
+ fs.writeFileSync(pathJoin(keycloakThemeBuildingDirPath, "pom.xml"), Buffer.from(pomFileCode, "utf8"));
64
49
  }
65
50
 
66
51
  {
67
-
68
- const themeManifestFilePath = pathJoin(
69
- keycloakThemeBuildingDirPath, "src", "main",
70
- "resources", "META-INF", "keycloak-themes.json"
71
- );
52
+ const themeManifestFilePath = pathJoin(keycloakThemeBuildingDirPath, "src", "main", "resources", "META-INF", "keycloak-themes.json");
72
53
 
73
54
  try {
74
-
75
55
  fs.mkdirSync(pathDirname(themeManifestFilePath));
76
-
77
- } catch { }
56
+ } catch {}
78
57
 
79
58
  fs.writeFileSync(
80
59
  themeManifestFilePath,
81
60
  Buffer.from(
82
- JSON.stringify({
83
- "themes": [
84
- {
85
- "name": themeName,
86
- "types": ["login"]
87
- }
88
- ]
89
- }, null, 2),
90
- "utf8"
91
- )
61
+ JSON.stringify(
62
+ {
63
+ "themes": [
64
+ {
65
+ "name": themeName,
66
+ "types": ["login"],
67
+ },
68
+ ],
69
+ },
70
+ null,
71
+ 2,
72
+ ),
73
+ "utf8",
74
+ ),
92
75
  );
93
-
94
76
  }
95
77
 
96
- return { "jarFilePath": pathJoin(keycloakThemeBuildingDirPath, "target", `${themeName}-${version}.jar`) };
97
-
78
+ return {
79
+ "jarFilePath": pathJoin(keycloakThemeBuildingDirPath, "target", `${themeName}-${version}.jar`),
80
+ };
98
81
  }
99
-
@@ -1,36 +1,33 @@
1
-
2
1
  import { transformCodebase } from "../tools/transformCodebase";
3
2
  import * as fs from "fs";
4
3
  import { join as pathJoin } from "path";
5
- import {
6
- replaceImportsInCssCode,
7
- replaceImportsFromStaticInJsCode
8
- } from "./replaceImportFromStatic";
4
+ import { replaceImportsInCssCode, replaceImportsFromStaticInJsCode } from "./replaceImportFromStatic";
9
5
  import { generateFtlFilesCodeFactory, pageIds } from "./generateFtl";
10
6
  import { downloadBuiltinKeycloakTheme } from "../download-builtin-keycloak-theme";
11
7
  import * as child_process from "child_process";
12
8
  import { resourcesCommonPath, resourcesPath, subDirOfPublicDirBasename } from "../../lib/getKcContext/kcContextMocks/urlResourcesPath";
13
9
  import { isInside } from "../tools/isInside";
14
10
 
15
-
16
- export function generateKeycloakThemeResources(
17
- params: {
18
- themeName: string;
19
- reactAppBuildDirPath: string;
20
- keycloakThemeBuildingDirPath: string;
21
- urlPathname: string;
22
- //If urlOrigin is not undefined then it means --externals-assets
23
- urlOrigin: undefined | string;
24
- extraPagesId: string[];
25
- extraThemeProperties: string[];
26
- keycloakVersion: "11.0.3" | "15.0.2"
27
- }
28
- ) {
29
-
30
- const {
31
- themeName, reactAppBuildDirPath, keycloakThemeBuildingDirPath,
32
- urlPathname, urlOrigin, extraPagesId, extraThemeProperties,
33
- keycloakVersion
11
+ export function generateKeycloakThemeResources(params: {
12
+ themeName: string;
13
+ reactAppBuildDirPath: string;
14
+ keycloakThemeBuildingDirPath: string;
15
+ urlPathname: string;
16
+ //If urlOrigin is not undefined then it means --externals-assets
17
+ urlOrigin: undefined | string;
18
+ extraPagesId: string[];
19
+ extraThemeProperties: string[];
20
+ keycloakVersion: "11.0.3" | "15.0.2";
21
+ }) {
22
+ const {
23
+ themeName,
24
+ reactAppBuildDirPath,
25
+ keycloakThemeBuildingDirPath,
26
+ urlPathname,
27
+ urlOrigin,
28
+ extraPagesId,
29
+ extraThemeProperties,
30
+ keycloakVersion,
34
31
  } = params;
35
32
 
36
33
  const themeDirPath = pathJoin(keycloakThemeBuildingDirPath, "src", "main", "resources", "theme", themeName, "login");
@@ -38,141 +35,106 @@ export function generateKeycloakThemeResources(
38
35
  let allCssGlobalsToDefine: Record<string, string> = {};
39
36
 
40
37
  transformCodebase({
41
- "destDirPath":
42
- urlOrigin === undefined ?
43
- pathJoin(themeDirPath, "resources", "build") :
44
- reactAppBuildDirPath,
38
+ "destDirPath": urlOrigin === undefined ? pathJoin(themeDirPath, "resources", "build") : reactAppBuildDirPath,
45
39
  "srcDirPath": reactAppBuildDirPath,
46
40
  "transformSourceCode": ({ filePath, sourceCode }) => {
47
-
48
41
  //NOTE: Prevent cycles, excludes the folder we generated for debug in public/
49
42
  if (
50
43
  urlOrigin === undefined &&
51
44
  isInside({
52
45
  "dirPath": pathJoin(reactAppBuildDirPath, subDirOfPublicDirBasename),
53
- filePath
46
+ filePath,
54
47
  })
55
48
  ) {
56
49
  return undefined;
57
50
  }
58
51
 
59
52
  if (urlOrigin === undefined && /\.css?$/i.test(filePath)) {
60
-
61
- const { cssGlobalsToDefine, fixedCssCode } = replaceImportsInCssCode(
62
- { "cssCode": sourceCode.toString("utf8") }
63
- );
53
+ const { cssGlobalsToDefine, fixedCssCode } = replaceImportsInCssCode({
54
+ "cssCode": sourceCode.toString("utf8"),
55
+ });
64
56
 
65
57
  allCssGlobalsToDefine = {
66
58
  ...allCssGlobalsToDefine,
67
- ...cssGlobalsToDefine
59
+ ...cssGlobalsToDefine,
68
60
  };
69
61
 
70
- return { "modifiedSourceCode": Buffer.from(fixedCssCode, "utf8") };
71
-
62
+ return {
63
+ "modifiedSourceCode": Buffer.from(fixedCssCode, "utf8"),
64
+ };
72
65
  }
73
66
 
74
67
  if (/\.js?$/i.test(filePath)) {
75
-
76
68
  const { fixedJsCode } = replaceImportsFromStaticInJsCode({
77
69
  "jsCode": sourceCode.toString("utf8"),
78
- urlOrigin
70
+ urlOrigin,
79
71
  });
80
72
 
81
- return { "modifiedSourceCode": Buffer.from(fixedJsCode, "utf8") };
82
-
73
+ return {
74
+ "modifiedSourceCode": Buffer.from(fixedJsCode, "utf8"),
75
+ };
83
76
  }
84
77
 
85
- return urlOrigin === undefined ?
86
- { "modifiedSourceCode": sourceCode } :
87
- undefined;
88
-
89
- }
78
+ return urlOrigin === undefined ? { "modifiedSourceCode": sourceCode } : undefined;
79
+ },
90
80
  });
91
81
 
92
82
  const { generateFtlFilesCode } = generateFtlFilesCodeFactory({
93
83
  "cssGlobalsToDefine": allCssGlobalsToDefine,
94
- "indexHtmlCode": fs.readFileSync(
95
- pathJoin(reactAppBuildDirPath, "index.html")
96
- ).toString("utf8"),
84
+ "indexHtmlCode": fs.readFileSync(pathJoin(reactAppBuildDirPath, "index.html")).toString("utf8"),
97
85
  urlPathname,
98
- urlOrigin
86
+ urlOrigin,
99
87
  });
100
88
 
101
89
  [...pageIds, ...extraPagesId].forEach(pageId => {
102
-
103
90
  const { ftlCode } = generateFtlFilesCode({ pageId });
104
91
 
105
92
  fs.mkdirSync(themeDirPath, { "recursive": true });
106
93
 
107
- fs.writeFileSync(
108
- pathJoin(themeDirPath, pageId),
109
- Buffer.from(ftlCode, "utf8")
110
- );
111
-
94
+ fs.writeFileSync(pathJoin(themeDirPath, pageId), Buffer.from(ftlCode, "utf8"));
112
95
  });
113
96
 
114
97
  {
115
-
116
98
  const tmpDirPath = pathJoin(themeDirPath, "..", "tmp_xxKdLpdIdLd");
117
99
 
118
100
  downloadBuiltinKeycloakTheme({
119
101
  keycloakVersion,
120
- "destDirPath": tmpDirPath
102
+ "destDirPath": tmpDirPath,
121
103
  });
122
104
 
123
105
  const themeResourcesDirPath = pathJoin(themeDirPath, "resources");
124
106
 
125
107
  transformCodebase({
126
108
  "srcDirPath": pathJoin(tmpDirPath, "keycloak", "login", "resources"),
127
- "destDirPath": themeResourcesDirPath
109
+ "destDirPath": themeResourcesDirPath,
128
110
  });
129
111
 
130
112
  const reactAppPublicDirPath = pathJoin(reactAppBuildDirPath, "..", "public");
131
113
 
132
114
  transformCodebase({
133
115
  "srcDirPath": themeResourcesDirPath,
134
- "destDirPath": pathJoin(
135
- reactAppPublicDirPath,
136
- resourcesPath
137
- )
116
+ "destDirPath": pathJoin(reactAppPublicDirPath, resourcesPath),
138
117
  });
139
118
 
140
119
  transformCodebase({
141
120
  "srcDirPath": pathJoin(tmpDirPath, "keycloak", "common", "resources"),
142
- "destDirPath": pathJoin(
143
- reactAppPublicDirPath,
144
- resourcesCommonPath
145
- )
121
+ "destDirPath": pathJoin(reactAppPublicDirPath, resourcesCommonPath),
146
122
  });
147
123
 
148
- const keycloakResourcesWithinPublicDirPath =
149
- pathJoin(reactAppPublicDirPath, subDirOfPublicDirBasename);
150
-
124
+ const keycloakResourcesWithinPublicDirPath = pathJoin(reactAppPublicDirPath, subDirOfPublicDirBasename);
151
125
 
152
126
  fs.writeFileSync(
153
127
  pathJoin(keycloakResourcesWithinPublicDirPath, "README.txt"),
154
- Buffer.from([
155
- "This is just a test folder that helps develop",
156
- "the login and register page without having to yarn build"
157
- ].join(" "))
128
+ Buffer.from(["This is just a test folder that helps develop", "the login and register page without having to yarn build"].join(" ")),
158
129
  );
159
130
 
160
- fs.writeFileSync(
161
- pathJoin(keycloakResourcesWithinPublicDirPath, ".gitignore"),
162
- Buffer.from("*", "utf8")
163
- );
131
+ fs.writeFileSync(pathJoin(keycloakResourcesWithinPublicDirPath, ".gitignore"), Buffer.from("*", "utf8"));
164
132
 
165
133
  child_process.execSync(`rm -r ${tmpDirPath}`);
166
-
167
134
  }
168
135
 
169
136
  fs.writeFileSync(
170
137
  pathJoin(themeDirPath, "theme.properties"),
171
- Buffer.from(
172
- "parent=keycloak".concat("\n\n", extraThemeProperties.join("\n\n")),
173
- "utf8"
174
- )
138
+ Buffer.from("parent=keycloak".concat("\n\n", extraThemeProperties.join("\n\n")), "utf8"),
175
139
  );
176
-
177
140
  }
178
-
@@ -4,7 +4,5 @@ export * from "./build-keycloak-theme";
4
4
  import { main } from "./build-keycloak-theme";
5
5
 
6
6
  if (require.main === module) {
7
-
8
- main();
9
-
10
- }
7
+ main();
8
+ }