keycloakify 10.0.0-rc.37 → 10.0.0-rc.39

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 (307) hide show
  1. package/account/Fallback.d.ts +1 -2
  2. package/account/Fallback.js.map +1 -1
  3. package/account/KcContext/KcContext.d.ts +6 -6
  4. package/account/KcContext/getKcContextMock.d.ts +9 -9
  5. package/account/KcContext/getKcContextMock.js +3 -3
  6. package/account/KcContext/getKcContextMock.js.map +1 -1
  7. package/account/Template.d.ts +1 -2
  8. package/account/Template.js +7 -6
  9. package/account/Template.js.map +1 -1
  10. package/account/TemplateProps.d.ts +1 -3
  11. package/account/i18n/i18n.d.ts +9 -4
  12. package/account/i18n/i18n.js +132 -87
  13. package/account/i18n/i18n.js.map +1 -1
  14. package/account/i18n/index.d.ts +9 -2
  15. package/account/i18n/index.js +5 -1
  16. package/account/i18n/index.js.map +1 -1
  17. package/account/lib/kcClsx.d.ts +9 -0
  18. package/account/lib/{useGetClassName.js → kcClsx.js} +3 -3
  19. package/account/lib/kcClsx.js.map +1 -0
  20. package/account/pages/Account.d.ts +1 -2
  21. package/account/pages/Account.js +9 -7
  22. package/account/pages/Account.js.map +1 -1
  23. package/account/pages/Applications.d.ts +1 -2
  24. package/account/pages/Applications.js +7 -7
  25. package/account/pages/Applications.js.map +1 -1
  26. package/account/pages/FederatedIdentity.d.ts +1 -2
  27. package/account/pages/FederatedIdentity.js +4 -3
  28. package/account/pages/FederatedIdentity.js.map +1 -1
  29. package/account/pages/Log.d.ts +1 -2
  30. package/account/pages/Log.js +6 -5
  31. package/account/pages/Log.js.map +1 -1
  32. package/account/pages/PageProps.d.ts +2 -4
  33. package/account/pages/Password.d.ts +1 -2
  34. package/account/pages/Password.js +10 -9
  35. package/account/pages/Password.js.map +1 -1
  36. package/account/pages/Sessions.d.ts +1 -2
  37. package/account/pages/Sessions.js +6 -6
  38. package/account/pages/Sessions.js.map +1 -1
  39. package/account/pages/Totp.d.ts +1 -2
  40. package/account/pages/Totp.js +6 -5
  41. package/account/pages/Totp.js.map +1 -1
  42. package/bin/193.index.js +13 -13
  43. package/bin/{430.index.js → 214.index.js} +161 -2
  44. package/bin/3.index.js +165 -149
  45. package/bin/322.index.js +595 -0
  46. package/bin/453.index.js +3 -3
  47. package/bin/526.index.js +42 -632
  48. package/bin/538.index.js +563 -0
  49. package/bin/932.index.js +7 -7
  50. package/bin/{890.index.js → 941.index.js} +2 -159
  51. package/bin/944.index.js +621 -0
  52. package/bin/961.index.js +5 -5
  53. package/bin/97.index.js +3 -3
  54. package/bin/{314.index.js → 98.index.js} +217 -48
  55. package/bin/main.js +20 -8
  56. package/lib/getKcClsx.d.ts +11 -0
  57. package/lib/getKcClsx.js +55 -0
  58. package/lib/getKcClsx.js.map +1 -0
  59. package/login/Fallback.d.ts +2 -2
  60. package/login/Fallback.js.map +1 -1
  61. package/login/KcContext/KcContext.d.ts +6 -6
  62. package/login/KcContext/getKcContextMock.d.ts +9 -9
  63. package/login/KcContext/getKcContextMock.js +3 -3
  64. package/login/KcContext/getKcContextMock.js.map +1 -1
  65. package/login/Template.d.ts +1 -2
  66. package/login/Template.js +10 -9
  67. package/login/Template.js.map +1 -1
  68. package/login/TemplateProps.d.ts +1 -3
  69. package/login/UserProfileFormFields.d.ts +6 -5
  70. package/login/UserProfileFormFields.js +35 -36
  71. package/login/UserProfileFormFields.js.map +1 -1
  72. package/login/i18n/i18n.d.ts +9 -4
  73. package/login/i18n/i18n.js +136 -91
  74. package/login/i18n/i18n.js.map +1 -1
  75. package/login/i18n/index.d.ts +9 -2
  76. package/login/i18n/index.js +5 -1
  77. package/login/i18n/index.js.map +1 -1
  78. package/login/lib/kcClsx.d.ts +9 -0
  79. package/login/lib/{useGetClassName.js → kcClsx.js} +3 -3
  80. package/login/lib/kcClsx.js.map +1 -0
  81. package/login/lib/useUserProfileForm.d.ts +9 -6
  82. package/login/lib/useUserProfileForm.js +7 -5
  83. package/login/lib/useUserProfileForm.js.map +1 -1
  84. package/login/pages/Code.d.ts +1 -2
  85. package/login/pages/Code.js +6 -5
  86. package/login/pages/Code.js.map +1 -1
  87. package/login/pages/DeleteAccountConfirm.d.ts +1 -2
  88. package/login/pages/DeleteAccountConfirm.js +7 -7
  89. package/login/pages/DeleteAccountConfirm.js.map +1 -1
  90. package/login/pages/DeleteCredential.d.ts +1 -2
  91. package/login/pages/DeleteCredential.js +6 -6
  92. package/login/pages/DeleteCredential.js.map +1 -1
  93. package/login/pages/Error.d.ts +1 -2
  94. package/login/pages/Error.js +4 -3
  95. package/login/pages/Error.js.map +1 -1
  96. package/login/pages/FrontchannelLogout.d.ts +1 -2
  97. package/login/pages/FrontchannelLogout.js +4 -3
  98. package/login/pages/FrontchannelLogout.js.map +1 -1
  99. package/login/pages/IdpReviewUserProfile.d.ts +2 -2
  100. package/login/pages/IdpReviewUserProfile.js +6 -6
  101. package/login/pages/IdpReviewUserProfile.js.map +1 -1
  102. package/login/pages/Info.d.ts +1 -2
  103. package/login/pages/Info.js +4 -3
  104. package/login/pages/Info.js.map +1 -1
  105. package/login/pages/Login.d.ts +1 -2
  106. package/login/pages/Login.js +10 -8
  107. package/login/pages/Login.js.map +1 -1
  108. package/login/pages/LoginConfigTotp.d.ts +1 -2
  109. package/login/pages/LoginConfigTotp.js +8 -7
  110. package/login/pages/LoginConfigTotp.js.map +1 -1
  111. package/login/pages/LoginIdpLinkConfirm.d.ts +1 -2
  112. package/login/pages/LoginIdpLinkConfirm.js +6 -6
  113. package/login/pages/LoginIdpLinkConfirm.js.map +1 -1
  114. package/login/pages/LoginIdpLinkEmail.d.ts +1 -2
  115. package/login/pages/LoginIdpLinkEmail.js +4 -3
  116. package/login/pages/LoginIdpLinkEmail.js.map +1 -1
  117. package/login/pages/LoginOauth2DeviceVerifyUserCode.d.ts +1 -2
  118. package/login/pages/LoginOauth2DeviceVerifyUserCode.js +6 -6
  119. package/login/pages/LoginOauth2DeviceVerifyUserCode.js.map +1 -1
  120. package/login/pages/LoginOauthGrant.d.ts +1 -2
  121. package/login/pages/LoginOauthGrant.js +7 -7
  122. package/login/pages/LoginOauthGrant.js.map +1 -1
  123. package/login/pages/LoginOtp.d.ts +1 -2
  124. package/login/pages/LoginOtp.js +6 -6
  125. package/login/pages/LoginOtp.js.map +1 -1
  126. package/login/pages/LoginPageExpired.d.ts +1 -2
  127. package/login/pages/LoginPageExpired.js +4 -3
  128. package/login/pages/LoginPageExpired.js.map +1 -1
  129. package/login/pages/LoginPassword.d.ts +1 -2
  130. package/login/pages/LoginPassword.js +9 -7
  131. package/login/pages/LoginPassword.js.map +1 -1
  132. package/login/pages/LoginRecoveryAuthnCodeConfig.d.ts +1 -2
  133. package/login/pages/LoginRecoveryAuthnCodeConfig.js +9 -7
  134. package/login/pages/LoginRecoveryAuthnCodeConfig.js.map +1 -1
  135. package/login/pages/LoginRecoveryAuthnCodeInput.d.ts +1 -2
  136. package/login/pages/LoginRecoveryAuthnCodeInput.js +6 -6
  137. package/login/pages/LoginRecoveryAuthnCodeInput.js.map +1 -1
  138. package/login/pages/LoginResetOtp.d.ts +1 -2
  139. package/login/pages/LoginResetOtp.js +6 -6
  140. package/login/pages/LoginResetOtp.js.map +1 -1
  141. package/login/pages/LoginResetPassword.d.ts +1 -2
  142. package/login/pages/LoginResetPassword.js +7 -7
  143. package/login/pages/LoginResetPassword.js.map +1 -1
  144. package/login/pages/LoginUpdatePassword.d.ts +1 -2
  145. package/login/pages/LoginUpdatePassword.js +10 -9
  146. package/login/pages/LoginUpdatePassword.js.map +1 -1
  147. package/login/pages/LoginUpdateProfile.d.ts +2 -2
  148. package/login/pages/LoginUpdateProfile.js +7 -12
  149. package/login/pages/LoginUpdateProfile.js.map +1 -1
  150. package/login/pages/LoginUsername.d.ts +1 -2
  151. package/login/pages/LoginUsername.js +8 -7
  152. package/login/pages/LoginUsername.js.map +1 -1
  153. package/login/pages/LoginVerifyEmail.d.ts +1 -2
  154. package/login/pages/LoginVerifyEmail.js +4 -3
  155. package/login/pages/LoginVerifyEmail.js.map +1 -1
  156. package/login/pages/LoginX509Info.d.ts +1 -2
  157. package/login/pages/LoginX509Info.js +6 -6
  158. package/login/pages/LoginX509Info.js.map +1 -1
  159. package/login/pages/LogoutConfirm.d.ts +1 -2
  160. package/login/pages/LogoutConfirm.js +6 -6
  161. package/login/pages/LogoutConfirm.js.map +1 -1
  162. package/login/pages/PageProps.d.ts +2 -4
  163. package/login/pages/Register.d.ts +2 -2
  164. package/login/pages/Register.js +8 -16
  165. package/login/pages/Register.js.map +1 -1
  166. package/login/pages/SamlPostForm.d.ts +1 -2
  167. package/login/pages/SamlPostForm.js +4 -3
  168. package/login/pages/SamlPostForm.js.map +1 -1
  169. package/login/pages/SelectAuthenticator.d.ts +1 -2
  170. package/login/pages/SelectAuthenticator.js +6 -9
  171. package/login/pages/SelectAuthenticator.js.map +1 -1
  172. package/login/pages/Terms.d.ts +1 -2
  173. package/login/pages/Terms.js +6 -6
  174. package/login/pages/Terms.js.map +1 -1
  175. package/login/pages/UpdateEmail.d.ts +2 -2
  176. package/login/pages/UpdateEmail.js +8 -12
  177. package/login/pages/UpdateEmail.js.map +1 -1
  178. package/login/pages/WebauthnAuthenticate.d.ts +1 -2
  179. package/login/pages/WebauthnAuthenticate.js +13 -12
  180. package/login/pages/WebauthnAuthenticate.js.map +1 -1
  181. package/login/pages/WebauthnError.d.ts +1 -2
  182. package/login/pages/WebauthnError.js +7 -7
  183. package/login/pages/WebauthnError.js.map +1 -1
  184. package/login/pages/WebauthnRegister.d.ts +1 -2
  185. package/login/pages/WebauthnRegister.js +9 -8
  186. package/login/pages/WebauthnRegister.js.map +1 -1
  187. package/package.json +27 -22
  188. package/src/account/Fallback.tsx +1 -2
  189. package/src/account/KcContext/KcContext.ts +7 -7
  190. package/src/account/KcContext/getKcContextMock.ts +13 -24
  191. package/src/account/Template.tsx +8 -8
  192. package/src/account/TemplateProps.ts +1 -6
  193. package/src/account/i18n/i18n.tsx +204 -125
  194. package/src/account/i18n/index.ts +10 -2
  195. package/src/account/lib/{useGetClassName.ts → kcClsx.ts} +6 -2
  196. package/src/account/pages/Account.tsx +15 -21
  197. package/src/account/pages/Applications.tsx +8 -9
  198. package/src/account/pages/FederatedIdentity.tsx +5 -5
  199. package/src/account/pages/Log.tsx +8 -8
  200. package/src/account/pages/PageProps.ts +2 -4
  201. package/src/account/pages/Password.tsx +13 -16
  202. package/src/account/pages/Sessions.tsx +9 -10
  203. package/src/account/pages/Totp.tsx +19 -28
  204. package/src/bin/add-story.ts +3 -3
  205. package/src/bin/copy-keycloak-resources-to-public.ts +3 -3
  206. package/src/bin/download-keycloak-default-theme.ts +5 -5
  207. package/src/bin/eject-page.ts +3 -3
  208. package/src/bin/initialize-email-theme.ts +5 -5
  209. package/src/bin/keycloakify/buildJars/buildJar.ts +14 -14
  210. package/src/bin/keycloakify/buildJars/buildJars.ts +8 -8
  211. package/src/bin/keycloakify/buildJars/generatePom.ts +9 -9
  212. package/src/bin/keycloakify/generateFtl/generateFtl.ts +12 -12
  213. package/src/bin/keycloakify/generateSrcMainResources/bringInAccountV1.ts +7 -7
  214. package/src/bin/keycloakify/generateSrcMainResources/generateMessageProperties.ts +2 -66
  215. package/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResources.ts +9 -9
  216. package/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResourcesForMainTheme.ts +30 -24
  217. package/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResourcesForThemeVariant.ts +8 -8
  218. package/src/bin/keycloakify/generateStartKeycloakTestingContainer.ts +9 -9
  219. package/src/bin/keycloakify/keycloakify.ts +11 -11
  220. package/src/bin/keycloakify/replacers/replaceImportsInCssCode.ts +6 -6
  221. package/src/bin/keycloakify/replacers/replaceImportsInInlineCssCode.ts +7 -7
  222. package/src/bin/keycloakify/replacers/replaceImportsInJsCode/replaceImportsInJsCode.ts +10 -10
  223. package/src/bin/keycloakify/replacers/replaceImportsInJsCode/vite.ts +13 -13
  224. package/src/bin/keycloakify/replacers/replaceImportsInJsCode/webpack.ts +11 -11
  225. package/src/bin/main.ts +17 -2
  226. package/src/bin/shared/{buildOptions.ts → buildContext.ts} +65 -51
  227. package/src/bin/shared/copyKeycloakResourcesToPublic.ts +12 -12
  228. package/src/bin/shared/downloadKeycloakDefaultTheme.ts +7 -7
  229. package/src/bin/shared/downloadKeycloakStaticResources.ts +7 -7
  230. package/src/bin/shared/generateKcGenTs.ts +61 -0
  231. package/src/bin/shared/getThemeSrcDirPath.ts +3 -3
  232. package/src/bin/start-keycloak/appBuild.ts +11 -11
  233. package/src/bin/start-keycloak/keycloakifyBuild.ts +7 -7
  234. package/src/bin/start-keycloak/start-keycloak.ts +34 -22
  235. package/src/bin/tools/escapeStringForPropertiesFile.ts +64 -0
  236. package/src/bin/tools/getNpmWorkspaceRootDirPath.ts +3 -3
  237. package/src/bin/update-kc-gen.ts +13 -0
  238. package/src/lib/getKcClsx.ts +89 -0
  239. package/src/login/Fallback.tsx +2 -2
  240. package/src/login/KcContext/KcContext.ts +7 -7
  241. package/src/login/KcContext/getKcContextMock.ts +13 -24
  242. package/src/login/Template.tsx +36 -37
  243. package/src/login/TemplateProps.ts +1 -6
  244. package/src/login/UserProfileFormFields.tsx +67 -84
  245. package/src/login/i18n/i18n.tsx +208 -129
  246. package/src/login/i18n/index.ts +10 -2
  247. package/src/login/lib/{useGetClassName.ts → kcClsx.ts} +6 -2
  248. package/src/login/lib/useUserProfileForm.tsx +29 -21
  249. package/src/login/pages/Code.tsx +10 -8
  250. package/src/login/pages/DeleteAccountConfirm.tsx +9 -10
  251. package/src/login/pages/DeleteCredential.tsx +11 -10
  252. package/src/login/pages/Error.tsx +5 -5
  253. package/src/login/pages/FrontchannelLogout.tsx +7 -5
  254. package/src/login/pages/IdpReviewUserProfile.tsx +18 -21
  255. package/src/login/pages/Info.tsx +7 -5
  256. package/src/login/pages/Login.tsx +34 -53
  257. package/src/login/pages/LoginConfigTotp.tsx +30 -38
  258. package/src/login/pages/LoginIdpLinkConfirm.tsx +10 -21
  259. package/src/login/pages/LoginIdpLinkEmail.tsx +5 -5
  260. package/src/login/pages/LoginOauth2DeviceVerifyUserCode.tsx +19 -24
  261. package/src/login/pages/LoginOauthGrant.tsx +14 -21
  262. package/src/login/pages/LoginOtp.tsx +29 -33
  263. package/src/login/pages/LoginPageExpired.tsx +5 -5
  264. package/src/login/pages/LoginPassword.tsx +23 -33
  265. package/src/login/pages/LoginRecoveryAuthnCodeConfig.tsx +21 -25
  266. package/src/login/pages/LoginRecoveryAuthnCodeInput.tsx +21 -25
  267. package/src/login/pages/LoginResetOtp.tsx +21 -25
  268. package/src/login/pages/LoginResetPassword.tsx +21 -25
  269. package/src/login/pages/LoginUpdatePassword.tsx +42 -52
  270. package/src/login/pages/LoginUpdateProfile.tsx +29 -30
  271. package/src/login/pages/LoginUsername.tsx +23 -35
  272. package/src/login/pages/LoginVerifyEmail.tsx +7 -5
  273. package/src/login/pages/LoginX509Info.tsx +27 -36
  274. package/src/login/pages/LogoutConfirm.tsx +11 -17
  275. package/src/login/pages/PageProps.ts +2 -4
  276. package/src/login/pages/Register.tsx +27 -46
  277. package/src/login/pages/SamlPostForm.tsx +5 -5
  278. package/src/login/pages/SelectAuthenticator.tsx +24 -26
  279. package/src/login/pages/Terms.tsx +9 -16
  280. package/src/login/pages/UpdateEmail.tsx +29 -33
  281. package/src/login/pages/WebauthnAuthenticate.tsx +26 -32
  282. package/src/login/pages/WebauthnError.tsx +11 -22
  283. package/src/login/pages/WebauthnRegister.tsx +20 -28
  284. package/src/tools/clsx.ts +6 -48
  285. package/src/tools/clsx_withTransform.ts +55 -0
  286. package/src/vite-plugin/vite-plugin.ts +29 -21
  287. package/tools/clsx.d.ts +3 -2
  288. package/tools/clsx.js +5 -41
  289. package/tools/clsx.js.map +1 -1
  290. package/tools/clsx_withTransform.d.ts +5 -0
  291. package/tools/clsx_withTransform.js +43 -0
  292. package/tools/clsx_withTransform.js.map +1 -0
  293. package/vite-plugin/index.js +243 -102
  294. package/vite-plugin/vite-plugin.d.ts +3 -3
  295. package/account/lib/useGetClassName.d.ts +0 -7
  296. package/account/lib/useGetClassName.js.map +0 -1
  297. package/bin/795.index.js +0 -1197
  298. package/lib/isStorybook.d.ts +0 -1
  299. package/lib/isStorybook.js +0 -3
  300. package/lib/isStorybook.js.map +0 -1
  301. package/lib/useGetClassName.d.ts +0 -10
  302. package/lib/useGetClassName.js +0 -14
  303. package/lib/useGetClassName.js.map +0 -1
  304. package/login/lib/useGetClassName.d.ts +0 -7
  305. package/login/lib/useGetClassName.js.map +0 -1
  306. package/src/lib/isStorybook.ts +0 -3
  307. package/src/lib/useGetClassName.ts +0 -27
@@ -8,6 +8,7 @@ import * as recast from "recast";
8
8
  import * as babelParser from "@babel/parser";
9
9
  import babelGenerate from "@babel/generator";
10
10
  import * as babelTypes from "@babel/types";
11
+ import { escapeStringForPropertiesFile } from "../../tools/escapeStringForPropertiesFile";
11
12
 
12
13
  export function generateMessageProperties(params: {
13
14
  themeSrcDirPath: string;
@@ -146,7 +147,7 @@ export function generateMessageProperties(params: {
146
147
 
147
148
  for (const [languageTag, keyValueMap] of Object.entries(keyValueMapByLanguageTag)) {
148
149
  const propertiesFileSource = Object.entries(keyValueMap)
149
- .map(([key, value]) => `${key}=${escapeString(value)}`)
150
+ .map(([key, value]) => `${key}=${escapeStringForPropertiesFile(value)}`)
150
151
  .join("\n");
151
152
 
152
153
  out.push({
@@ -164,68 +165,3 @@ export function generateMessageProperties(params: {
164
165
 
165
166
  return out;
166
167
  }
167
-
168
- // Convert a JavaScript string to UTF-16 encoding
169
- function toUTF16(codePoint: number): string {
170
- if (codePoint <= 0xffff) {
171
- // BMP character
172
- return "\\u" + codePoint.toString(16).padStart(4, "0");
173
- } else {
174
- // Non-BMP character
175
- codePoint -= 0x10000;
176
- let highSurrogate = (codePoint >> 10) + 0xd800;
177
- let lowSurrogate = (codePoint % 0x400) + 0xdc00;
178
- return (
179
- "\\u" +
180
- highSurrogate.toString(16).padStart(4, "0") +
181
- "\\u" +
182
- lowSurrogate.toString(16).padStart(4, "0")
183
- );
184
- }
185
- }
186
-
187
- // Escapes special characters for use in a .properties file
188
- function escapeString(str: string): string {
189
- let escapedStr = "";
190
- for (const char of [...str]) {
191
- const codePoint = char.codePointAt(0);
192
- if (!codePoint) continue;
193
-
194
- switch (char) {
195
- case "\n":
196
- escapedStr += "\\n";
197
- break;
198
- case "\r":
199
- escapedStr += "\\r";
200
- break;
201
- case "\t":
202
- escapedStr += "\\t";
203
- break;
204
- case "\\":
205
- escapedStr += "\\\\";
206
- break;
207
- case ":":
208
- escapedStr += "\\:";
209
- break;
210
- case "=":
211
- escapedStr += "\\=";
212
- break;
213
- case "#":
214
- escapedStr += "\\#";
215
- break;
216
- case "!":
217
- escapedStr += "\\!";
218
- break;
219
- case "'":
220
- escapedStr += "''";
221
- break;
222
- default:
223
- if (codePoint > 0x7f) {
224
- escapedStr += toUTF16(codePoint); // Non-ASCII characters
225
- } else {
226
- escapedStr += char; // ASCII character needs no escape
227
- }
228
- }
229
- }
230
- return escapedStr;
231
- }
@@ -1,34 +1,34 @@
1
- import type { BuildOptions } from "../../shared/buildOptions";
1
+ import type { BuildContext } from "../../shared/buildContext";
2
2
  import { assert } from "tsafe/assert";
3
3
  import {
4
4
  generateSrcMainResourcesForMainTheme,
5
- type BuildOptionsLike as BuildOptionsLike_generateSrcMainResourcesForMainTheme
5
+ type BuildContextLike as BuildContextLike_generateSrcMainResourcesForMainTheme
6
6
  } from "./generateSrcMainResourcesForMainTheme";
7
7
  import { generateSrcMainResourcesForThemeVariant } from "./generateSrcMainResourcesForThemeVariant";
8
8
 
9
- export type BuildOptionsLike = BuildOptionsLike_generateSrcMainResourcesForMainTheme & {
9
+ export type BuildContextLike = BuildContextLike_generateSrcMainResourcesForMainTheme & {
10
10
  themeNames: string[];
11
11
  };
12
12
 
13
- assert<BuildOptions extends BuildOptionsLike ? true : false>();
13
+ assert<BuildContext extends BuildContextLike ? true : false>();
14
14
 
15
15
  export async function generateSrcMainResources(params: {
16
- buildOptions: BuildOptionsLike;
16
+ buildContext: BuildContextLike;
17
17
  }): Promise<void> {
18
- const { buildOptions } = params;
18
+ const { buildContext } = params;
19
19
 
20
- const [themeName, ...themeVariantNames] = buildOptions.themeNames;
20
+ const [themeName, ...themeVariantNames] = buildContext.themeNames;
21
21
 
22
22
  await generateSrcMainResourcesForMainTheme({
23
23
  themeName,
24
- buildOptions
24
+ buildContext
25
25
  });
26
26
 
27
27
  for (const themeVariantName of themeVariantNames) {
28
28
  generateSrcMainResourcesForThemeVariant({
29
29
  themeName,
30
30
  themeVariantName,
31
- buildOptions
31
+ buildContext
32
32
  });
33
33
  }
34
34
  }
@@ -5,7 +5,7 @@ import { replaceImportsInJsCode } from "../replacers/replaceImportsInJsCode";
5
5
  import { replaceImportsInCssCode } from "../replacers/replaceImportsInCssCode";
6
6
  import {
7
7
  generateFtlFilesCodeFactory,
8
- type BuildOptionsLike as BuildOptionsLike_kcContextExclusionsFtlCode
8
+ type BuildContextLike as BuildContextLike_kcContextExclusionsFtlCode
9
9
  } from "../generateFtl";
10
10
  import {
11
11
  type ThemeType,
@@ -17,18 +17,18 @@ import {
17
17
  accountThemePageIds
18
18
  } from "../../shared/constants";
19
19
  import { isInside } from "../../tools/isInside";
20
- import type { BuildOptions } from "../../shared/buildOptions";
20
+ import type { BuildContext } from "../../shared/buildContext";
21
21
  import { assert, type Equals } from "tsafe/assert";
22
22
  import {
23
23
  downloadKeycloakStaticResources,
24
- type BuildOptionsLike as BuildOptionsLike_downloadKeycloakStaticResources
24
+ type BuildContextLike as BuildContextLike_downloadKeycloakStaticResources
25
25
  } from "../../shared/downloadKeycloakStaticResources";
26
26
  import { readFieldNameUsage } from "./readFieldNameUsage";
27
27
  import { readExtraPagesNames } from "./readExtraPageNames";
28
28
  import { generateMessageProperties } from "./generateMessageProperties";
29
29
  import {
30
30
  bringInAccountV1,
31
- type BuildOptionsLike as BuildOptionsLike_bringInAccountV1
31
+ type BuildContextLike as BuildContextLike_bringInAccountV1
32
32
  } from "./bringInAccountV1";
33
33
  import { getThemeSrcDirPath } from "../../shared/getThemeSrcDirPath";
34
34
  import { rmSync } from "../../tools/fs.rmSync";
@@ -38,36 +38,38 @@ import {
38
38
  type MetaInfKeycloakTheme
39
39
  } from "../../shared/metaInfKeycloakThemes";
40
40
  import { objectEntries } from "tsafe/objectEntries";
41
+ import { escapeStringForPropertiesFile } from "../../tools/escapeStringForPropertiesFile";
41
42
 
42
- export type BuildOptionsLike = BuildOptionsLike_kcContextExclusionsFtlCode &
43
- BuildOptionsLike_downloadKeycloakStaticResources &
44
- BuildOptionsLike_bringInAccountV1 & {
43
+ export type BuildContextLike = BuildContextLike_kcContextExclusionsFtlCode &
44
+ BuildContextLike_downloadKeycloakStaticResources &
45
+ BuildContextLike_bringInAccountV1 & {
45
46
  bundler: "vite" | "webpack";
46
47
  extraThemeProperties: string[] | undefined;
47
48
  loginThemeResourcesFromKeycloakVersion: string;
48
- reactAppBuildDirPath: string;
49
+ projectBuildDirPath: string;
49
50
  assetsDirPath: string;
50
51
  urlPathname: string | undefined;
51
- reactAppRootDirPath: string;
52
+ projectDirPath: string;
52
53
  keycloakifyBuildDirPath: string;
54
+ environmentVariables: { name: string; default: string }[];
53
55
  };
54
56
 
55
- assert<BuildOptions extends BuildOptionsLike ? true : false>();
57
+ assert<BuildContext extends BuildContextLike ? true : false>();
56
58
 
57
59
  export async function generateSrcMainResourcesForMainTheme(params: {
58
60
  themeName: string;
59
- buildOptions: BuildOptionsLike;
61
+ buildContext: BuildContextLike;
60
62
  }): Promise<void> {
61
- const { themeName, buildOptions } = params;
63
+ const { themeName, buildContext } = params;
62
64
 
63
65
  const { themeSrcDirPath } = getThemeSrcDirPath({
64
- reactAppRootDirPath: buildOptions.reactAppRootDirPath
66
+ projectDirPath: buildContext.projectDirPath
65
67
  });
66
68
 
67
69
  const getThemeTypeDirPath = (params: { themeType: ThemeType | "email" }) => {
68
70
  const { themeType } = params;
69
71
  return pathJoin(
70
- buildOptions.keycloakifyBuildDirPath,
72
+ buildContext.keycloakifyBuildDirPath,
71
73
  "src",
72
74
  "main",
73
75
  "resources",
@@ -122,7 +124,7 @@ export async function generateSrcMainResourcesForMainTheme(params: {
122
124
  }
123
125
 
124
126
  transformCodebase({
125
- srcDirPath: buildOptions.reactAppBuildDirPath,
127
+ srcDirPath: buildContext.projectBuildDirPath,
126
128
  destDirPath,
127
129
  transformSourceCode: ({ filePath, sourceCode }) => {
128
130
  //NOTE: Prevent cycles, excludes the folder we generated for debug in public/
@@ -130,7 +132,7 @@ export async function generateSrcMainResourcesForMainTheme(params: {
130
132
  if (
131
133
  isInside({
132
134
  dirPath: pathJoin(
133
- buildOptions.reactAppBuildDirPath,
135
+ buildContext.projectBuildDirPath,
134
136
  keycloak_resources
135
137
  ),
136
138
  filePath
@@ -161,7 +163,7 @@ export async function generateSrcMainResourcesForMainTheme(params: {
161
163
  if (/\.js?$/i.test(filePath)) {
162
164
  const { fixedJsCode } = replaceImportsInJsCode({
163
165
  jsCode: sourceCode.toString("utf8"),
164
- buildOptions
166
+ buildContext
165
167
  });
166
168
 
167
169
  return {
@@ -177,10 +179,10 @@ export async function generateSrcMainResourcesForMainTheme(params: {
177
179
  const { generateFtlFilesCode } = generateFtlFilesCodeFactory({
178
180
  themeName,
179
181
  indexHtmlCode: fs
180
- .readFileSync(pathJoin(buildOptions.reactAppBuildDirPath, "index.html"))
182
+ .readFileSync(pathJoin(buildContext.projectBuildDirPath, "index.html"))
181
183
  .toString("utf8"),
182
184
  cssGlobalsToDefine,
183
- buildOptions,
185
+ buildContext,
184
186
  keycloakifyVersion: readThisNpmPackageVersion(),
185
187
  themeType,
186
188
  fieldNames: readFieldNameUsage({
@@ -240,12 +242,12 @@ export async function generateSrcMainResourcesForMainTheme(params: {
240
242
  case "account":
241
243
  return lastKeycloakVersionWithAccountV1;
242
244
  case "login":
243
- return buildOptions.loginThemeResourcesFromKeycloakVersion;
245
+ return buildContext.loginThemeResourcesFromKeycloakVersion;
244
246
  }
245
247
  })(),
246
248
  themeDirPath: pathResolve(pathJoin(themeTypeDirPath, "..")),
247
249
  themeType,
248
- buildOptions
250
+ buildContext
249
251
  });
250
252
 
251
253
  fs.writeFileSync(
@@ -261,7 +263,11 @@ export async function generateSrcMainResourcesForMainTheme(params: {
261
263
  }
262
264
  assert<Equals<typeof themeType, never>>(false);
263
265
  })()}`,
264
- ...(buildOptions.extraThemeProperties ?? [])
266
+ ...(buildContext.extraThemeProperties ?? []),
267
+ buildContext.environmentVariables.map(
268
+ ({ name, default: defaultValue }) =>
269
+ `${name}=\${env.${name}:${escapeStringForPropertiesFile(defaultValue)}}`
270
+ )
265
271
  ].join("\n\n"),
266
272
  "utf8"
267
273
  )
@@ -285,7 +291,7 @@ export async function generateSrcMainResourcesForMainTheme(params: {
285
291
 
286
292
  if (implementedThemeTypes.account) {
287
293
  await bringInAccountV1({
288
- buildOptions
294
+ buildContext
289
295
  });
290
296
  }
291
297
 
@@ -307,7 +313,7 @@ export async function generateSrcMainResourcesForMainTheme(params: {
307
313
  }
308
314
 
309
315
  writeMetaInfKeycloakThemes({
310
- keycloakifyBuildDirPath: buildOptions.keycloakifyBuildDirPath,
316
+ keycloakifyBuildDirPath: buildContext.keycloakifyBuildDirPath,
311
317
  metaInfKeycloakThemes
312
318
  });
313
319
  }
@@ -1,27 +1,27 @@
1
1
  import { join as pathJoin, extname as pathExtname, sep as pathSep } from "path";
2
2
  import { transformCodebase } from "../../tools/transformCodebase";
3
- import type { BuildOptions } from "../../shared/buildOptions";
3
+ import type { BuildContext } from "../../shared/buildContext";
4
4
  import {
5
5
  readMetaInfKeycloakThemes,
6
6
  writeMetaInfKeycloakThemes
7
7
  } from "../../shared/metaInfKeycloakThemes";
8
8
  import { assert } from "tsafe/assert";
9
9
 
10
- export type BuildOptionsLike = {
10
+ export type BuildContextLike = {
11
11
  keycloakifyBuildDirPath: string;
12
12
  };
13
13
 
14
- assert<BuildOptions extends BuildOptionsLike ? true : false>();
14
+ assert<BuildContext extends BuildContextLike ? true : false>();
15
15
 
16
16
  export function generateSrcMainResourcesForThemeVariant(params: {
17
17
  themeName: string;
18
18
  themeVariantName: string;
19
- buildOptions: BuildOptionsLike;
19
+ buildContext: BuildContextLike;
20
20
  }) {
21
- const { themeName, themeVariantName, buildOptions } = params;
21
+ const { themeName, themeVariantName, buildContext } = params;
22
22
 
23
23
  const mainThemeDirPath = pathJoin(
24
- buildOptions.keycloakifyBuildDirPath,
24
+ buildContext.keycloakifyBuildDirPath,
25
25
  "src",
26
26
  "main",
27
27
  "resources",
@@ -58,7 +58,7 @@ export function generateSrcMainResourcesForThemeVariant(params: {
58
58
 
59
59
  {
60
60
  const updatedMetaInfKeycloakThemes = readMetaInfKeycloakThemes({
61
- keycloakifyBuildDirPath: buildOptions.keycloakifyBuildDirPath
61
+ keycloakifyBuildDirPath: buildContext.keycloakifyBuildDirPath
62
62
  });
63
63
 
64
64
  updatedMetaInfKeycloakThemes.themes.push({
@@ -73,7 +73,7 @@ export function generateSrcMainResourcesForThemeVariant(params: {
73
73
  });
74
74
 
75
75
  writeMetaInfKeycloakThemes({
76
- keycloakifyBuildDirPath: buildOptions.keycloakifyBuildDirPath,
76
+ keycloakifyBuildDirPath: buildContext.keycloakifyBuildDirPath,
77
77
  metaInfKeycloakThemes: updatedMetaInfKeycloakThemes
78
78
  });
79
79
  }
@@ -5,15 +5,15 @@ import {
5
5
  basename as pathBasename
6
6
  } from "path";
7
7
  import { assert } from "tsafe/assert";
8
- import type { BuildOptions } from "../shared/buildOptions";
8
+ import type { BuildContext } from "../shared/buildContext";
9
9
  import { accountV1ThemeName } from "../shared/constants";
10
10
 
11
- export type BuildOptionsLike = {
11
+ export type BuildContextLike = {
12
12
  keycloakifyBuildDirPath: string;
13
13
  themeNames: string[];
14
14
  };
15
15
 
16
- assert<BuildOptions extends BuildOptionsLike ? true : false>();
16
+ assert<BuildContext extends BuildContextLike ? true : false>();
17
17
 
18
18
  generateStartKeycloakTestingContainer.basename = "start_keycloak_testing_container.sh";
19
19
 
@@ -24,15 +24,15 @@ const keycloakVersion = "24.0.4";
24
24
  export function generateStartKeycloakTestingContainer(params: {
25
25
  jarFilePath: string;
26
26
  doesImplementAccountTheme: boolean;
27
- buildOptions: BuildOptionsLike;
27
+ buildContext: BuildContextLike;
28
28
  }) {
29
- const { jarFilePath, doesImplementAccountTheme, buildOptions } = params;
29
+ const { jarFilePath, doesImplementAccountTheme, buildContext } = params;
30
30
 
31
31
  const themeRelativeDirPath = pathJoin("src", "main", "resources", "theme");
32
32
 
33
33
  fs.writeFileSync(
34
34
  pathJoin(
35
- buildOptions.keycloakifyBuildDirPath,
35
+ buildContext.keycloakifyBuildDirPath,
36
36
  generateStartKeycloakTestingContainer.basename
37
37
  ),
38
38
  Buffer.from(
@@ -41,7 +41,7 @@ export function generateStartKeycloakTestingContainer(params: {
41
41
  "",
42
42
  `docker rm ${containerName} || true`,
43
43
  "",
44
- `cd "${buildOptions.keycloakifyBuildDirPath}"`,
44
+ `cd "${buildContext.keycloakifyBuildDirPath}"`,
45
45
  "",
46
46
  "docker run \\",
47
47
  " -p 8080:8080 \\",
@@ -50,11 +50,11 @@ export function generateStartKeycloakTestingContainer(params: {
50
50
  " -e KEYCLOAK_ADMIN_PASSWORD=admin \\",
51
51
  ` -v "${pathJoin(
52
52
  "$(pwd)",
53
- pathRelative(buildOptions.keycloakifyBuildDirPath, jarFilePath)
53
+ pathRelative(buildContext.keycloakifyBuildDirPath, jarFilePath)
54
54
  )}":"/opt/keycloak/providers/${pathBasename(jarFilePath)}" \\`,
55
55
  [
56
56
  ...(doesImplementAccountTheme ? [accountV1ThemeName] : []),
57
- ...buildOptions.themeNames
57
+ ...buildContext.themeNames
58
58
  ].map(
59
59
  themeName =>
60
60
  ` -v "${pathJoin(
@@ -2,7 +2,7 @@ import { generateSrcMainResources } from "./generateSrcMainResources";
2
2
  import { join as pathJoin, relative as pathRelative, sep as pathSep } from "path";
3
3
  import * as child_process from "child_process";
4
4
  import * as fs from "fs";
5
- import { readBuildOptions } from "../shared/buildOptions";
5
+ import { getBuildContext } from "../shared/buildContext";
6
6
  import { vitePluginSubScriptEnvNames, skipBuildJarsEnvName } from "../shared/constants";
7
7
  import { buildJars } from "./buildJars";
8
8
  import type { CliCommandOptions } from "../main";
@@ -47,7 +47,7 @@ export async function command(params: { cliCommandOptions: CliCommandOptions })
47
47
 
48
48
  const { cliCommandOptions } = params;
49
49
 
50
- const buildOptions = readBuildOptions({ cliCommandOptions });
50
+ const buildContext = getBuildContext({ cliCommandOptions });
51
51
 
52
52
  console.log(
53
53
  [
@@ -55,7 +55,7 @@ export async function command(params: { cliCommandOptions: CliCommandOptions })
55
55
  chalk.green(
56
56
  `Building the keycloak theme in .${pathSep}${pathRelative(
57
57
  process.cwd(),
58
- buildOptions.keycloakifyBuildDirPath
58
+ buildContext.keycloakifyBuildDirPath
59
59
  )} ...`
60
60
  )
61
61
  ].join(" ")
@@ -64,31 +64,31 @@ export async function command(params: { cliCommandOptions: CliCommandOptions })
64
64
  const startTime = Date.now();
65
65
 
66
66
  {
67
- if (!fs.existsSync(buildOptions.keycloakifyBuildDirPath)) {
68
- fs.mkdirSync(buildOptions.keycloakifyBuildDirPath, {
67
+ if (!fs.existsSync(buildContext.keycloakifyBuildDirPath)) {
68
+ fs.mkdirSync(buildContext.keycloakifyBuildDirPath, {
69
69
  recursive: true
70
70
  });
71
71
  }
72
72
 
73
73
  fs.writeFileSync(
74
- pathJoin(buildOptions.keycloakifyBuildDirPath, ".gitignore"),
74
+ pathJoin(buildContext.keycloakifyBuildDirPath, ".gitignore"),
75
75
  Buffer.from("*", "utf8")
76
76
  );
77
77
  }
78
78
 
79
- await generateSrcMainResources({ buildOptions });
79
+ await generateSrcMainResources({ buildContext });
80
80
 
81
81
  run_post_build_script: {
82
- if (buildOptions.bundler !== "vite") {
82
+ if (buildContext.bundler !== "vite") {
83
83
  break run_post_build_script;
84
84
  }
85
85
 
86
86
  child_process.execSync("npx vite", {
87
- cwd: buildOptions.reactAppRootDirPath,
87
+ cwd: buildContext.projectDirPath,
88
88
  env: {
89
89
  ...process.env,
90
90
  [vitePluginSubScriptEnvNames.runPostBuildScript]:
91
- JSON.stringify(buildOptions)
91
+ JSON.stringify(buildContext)
92
92
  }
93
93
  });
94
94
  }
@@ -98,7 +98,7 @@ export async function command(params: { cliCommandOptions: CliCommandOptions })
98
98
  break build_jars;
99
99
  }
100
100
 
101
- await buildJars({ buildOptions });
101
+ await buildJars({ buildContext });
102
102
  }
103
103
 
104
104
  console.log(
@@ -1,13 +1,13 @@
1
1
  import * as crypto from "crypto";
2
- import type { BuildOptions } from "../../shared/buildOptions";
2
+ import type { BuildContext } from "../../shared/buildContext";
3
3
  import { assert } from "tsafe/assert";
4
4
  import { basenameOfTheKeycloakifyResourcesDir } from "../../shared/constants";
5
5
 
6
- export type BuildOptionsLike = {
6
+ export type BuildContextLike = {
7
7
  urlPathname: string | undefined;
8
8
  };
9
9
 
10
- assert<BuildOptions extends BuildOptionsLike ? true : false>();
10
+ assert<BuildContext extends BuildContextLike ? true : false>();
11
11
 
12
12
  export function replaceImportsInCssCode(params: { cssCode: string }): {
13
13
  fixedCssCode: string;
@@ -44,11 +44,11 @@ export function replaceImportsInCssCode(params: { cssCode: string }): {
44
44
 
45
45
  export function generateCssCodeToDefineGlobals(params: {
46
46
  cssGlobalsToDefine: Record<string, string>;
47
- buildOptions: BuildOptionsLike;
47
+ buildContext: BuildContextLike;
48
48
  }): {
49
49
  cssCodeToPrependInHead: string;
50
50
  } {
51
- const { cssGlobalsToDefine, buildOptions } = params;
51
+ const { cssGlobalsToDefine, buildContext } = params;
52
52
 
53
53
  return {
54
54
  cssCodeToPrependInHead: [
@@ -59,7 +59,7 @@ export function generateCssCodeToDefineGlobals(params: {
59
59
  `--${cssVariableName}:`,
60
60
  cssGlobalsToDefine[cssVariableName].replace(
61
61
  new RegExp(
62
- `url\\(${(buildOptions.urlPathname ?? "/").replace(
62
+ `url\\(${(buildContext.urlPathname ?? "/").replace(
63
63
  /\//g,
64
64
  "\\/"
65
65
  )}`,
@@ -1,25 +1,25 @@
1
- import type { BuildOptions } from "../../shared/buildOptions";
1
+ import type { BuildContext } from "../../shared/buildContext";
2
2
  import { assert } from "tsafe/assert";
3
3
  import { basenameOfTheKeycloakifyResourcesDir } from "../../shared/constants";
4
4
 
5
- export type BuildOptionsLike = {
5
+ export type BuildContextLike = {
6
6
  urlPathname: string | undefined;
7
7
  };
8
8
 
9
- assert<BuildOptions extends BuildOptionsLike ? true : false>();
9
+ assert<BuildContext extends BuildContextLike ? true : false>();
10
10
 
11
11
  export function replaceImportsInInlineCssCode(params: {
12
12
  cssCode: string;
13
- buildOptions: BuildOptionsLike;
13
+ buildContext: BuildContextLike;
14
14
  }): {
15
15
  fixedCssCode: string;
16
16
  } {
17
- const { cssCode, buildOptions } = params;
17
+ const { cssCode, buildContext } = params;
18
18
 
19
19
  const fixedCssCode = cssCode.replace(
20
- buildOptions.urlPathname === undefined
20
+ buildContext.urlPathname === undefined
21
21
  ? /url\(["']?\/([^/][^)"']+)["']?\)/g
22
- : new RegExp(`url\\(["']?${buildOptions.urlPathname}([^)"']+)["']?\\)`, "g"),
22
+ : new RegExp(`url\\(["']?${buildContext.urlPathname}([^)"']+)["']?\\)`, "g"),
23
23
  (...[, group]) =>
24
24
  `url(\${url.resourcesPath}/${basenameOfTheKeycloakifyResourcesDir}/${group})`
25
25
  );
@@ -1,38 +1,38 @@
1
1
  import { assert } from "tsafe/assert";
2
- import type { BuildOptions } from "../../../shared/buildOptions";
2
+ import type { BuildContext } from "../../../shared/buildContext";
3
3
  import { replaceImportsInJsCode_vite } from "./vite";
4
4
  import { replaceImportsInJsCode_webpack } from "./webpack";
5
5
  import * as fs from "fs";
6
6
 
7
- export type BuildOptionsLike = {
8
- reactAppBuildDirPath: string;
7
+ export type BuildContextLike = {
8
+ projectBuildDirPath: string;
9
9
  assetsDirPath: string;
10
10
  urlPathname: string | undefined;
11
11
  bundler: "vite" | "webpack";
12
12
  };
13
13
 
14
- assert<BuildOptions extends BuildOptionsLike ? true : false>();
14
+ assert<BuildContext extends BuildContextLike ? true : false>();
15
15
 
16
16
  export function replaceImportsInJsCode(params: {
17
17
  jsCode: string;
18
- buildOptions: BuildOptionsLike;
18
+ buildContext: BuildContextLike;
19
19
  }) {
20
- const { jsCode, buildOptions } = params;
20
+ const { jsCode, buildContext } = params;
21
21
 
22
22
  const { fixedJsCode } = (() => {
23
- switch (buildOptions.bundler) {
23
+ switch (buildContext.bundler) {
24
24
  case "vite":
25
25
  return replaceImportsInJsCode_vite({
26
26
  jsCode,
27
- buildOptions,
27
+ buildContext,
28
28
  basenameOfAssetsFiles: readAssetsDirSync({
29
- assetsDirPath: params.buildOptions.assetsDirPath
29
+ assetsDirPath: params.buildContext.assetsDirPath
30
30
  })
31
31
  });
32
32
  case "webpack":
33
33
  return replaceImportsInJsCode_webpack({
34
34
  jsCode,
35
- buildOptions
35
+ buildContext
36
36
  });
37
37
  }
38
38
  })();