keycloakify 10.0.0-rc.97 → 10.0.0

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 (507) hide show
  1. package/PUBLIC_URL.js +2 -2
  2. package/PUBLIC_URL.js.map +1 -1
  3. package/README.md +28 -242
  4. package/account/KcContext/KcContext.d.ts +4 -1
  5. package/account/KcContext/KcContext.js.map +1 -1
  6. package/account/KcContext/kcContextMocks.js +7 -4
  7. package/account/KcContext/kcContextMocks.js.map +1 -1
  8. package/account/Template.js +3 -1
  9. package/account/Template.js.map +1 -1
  10. package/account/i18n/GenericI18n.d.ts +6 -0
  11. package/account/i18n/GenericI18n.js +2 -0
  12. package/account/i18n/GenericI18n.js.map +1 -0
  13. package/account/i18n/i18n.d.ts +24 -30
  14. package/account/i18n/i18n.js +50 -70
  15. package/account/i18n/i18n.js.map +1 -1
  16. package/account/i18n/index.d.ts +4 -3
  17. package/account/i18n/index.js.map +1 -1
  18. package/account/i18n/messages_defaultSet/ar.js.map +1 -0
  19. package/account/i18n/messages_defaultSet/ca.js.map +1 -0
  20. package/account/i18n/messages_defaultSet/cs.js.map +1 -0
  21. package/account/i18n/messages_defaultSet/da.js.map +1 -0
  22. package/account/i18n/messages_defaultSet/de.js.map +1 -0
  23. package/account/i18n/messages_defaultSet/el.js.map +1 -0
  24. package/account/i18n/messages_defaultSet/en.js.map +1 -0
  25. package/account/i18n/messages_defaultSet/es.js.map +1 -0
  26. package/account/i18n/messages_defaultSet/fa.js.map +1 -0
  27. package/account/i18n/messages_defaultSet/fi.js.map +1 -0
  28. package/account/i18n/messages_defaultSet/fr.js.map +1 -0
  29. package/account/i18n/messages_defaultSet/hu.js.map +1 -0
  30. package/account/i18n/{baseMessages → messages_defaultSet}/index.d.ts +1 -1
  31. package/account/i18n/{baseMessages → messages_defaultSet}/index.js +3 -3
  32. package/account/i18n/messages_defaultSet/index.js.map +1 -0
  33. package/account/i18n/messages_defaultSet/it.js.map +1 -0
  34. package/account/i18n/messages_defaultSet/ja.js.map +1 -0
  35. package/account/i18n/messages_defaultSet/lt.js.map +1 -0
  36. package/account/i18n/messages_defaultSet/lv.js.map +1 -0
  37. package/account/i18n/messages_defaultSet/nl.js.map +1 -0
  38. package/account/i18n/messages_defaultSet/no.js.map +1 -0
  39. package/account/i18n/messages_defaultSet/pl.js.map +1 -0
  40. package/account/i18n/messages_defaultSet/pt-BR.js.map +1 -0
  41. package/account/i18n/messages_defaultSet/ru.js.map +1 -0
  42. package/account/i18n/messages_defaultSet/sk.js.map +1 -0
  43. package/account/i18n/messages_defaultSet/sv.js.map +1 -0
  44. package/account/i18n/messages_defaultSet/th.js.map +1 -0
  45. package/account/i18n/messages_defaultSet/tr.js.map +1 -0
  46. package/account/i18n/messages_defaultSet/uk.js.map +1 -0
  47. package/account/i18n/messages_defaultSet/zh-CN.js.map +1 -0
  48. package/account/i18n/useI18n.d.ts +6 -5
  49. package/account/i18n/useI18n.js +37 -4
  50. package/account/i18n/useI18n.js.map +1 -1
  51. package/account/pages/Applications.js +1 -1
  52. package/account/pages/Applications.js.map +1 -1
  53. package/account/pages/FederatedIdentity.js +1 -1
  54. package/account/pages/FederatedIdentity.js.map +1 -1
  55. package/account/pages/Totp.js +5 -1
  56. package/account/pages/Totp.js.map +1 -1
  57. package/bin/193.index.js +5 -5
  58. package/bin/{490.index.js → 246.index.js} +22 -4
  59. package/bin/31.index.js +264 -203
  60. package/bin/440.index.js +178 -106
  61. package/bin/453.index.js +59 -7
  62. package/bin/526.index.js +525 -137
  63. package/bin/599.index.js +567 -0
  64. package/bin/{893.index.js → 622.index.js} +239 -231
  65. package/bin/{36.index.js → 678.index.js} +577 -71
  66. package/bin/{180.index.js → 697.index.js} +611 -526
  67. package/bin/743.index.js +70 -0
  68. package/bin/780.index.js +895 -0
  69. package/bin/786.index.js +185 -0
  70. package/bin/932.index.js +740 -52
  71. package/bin/{456.index.js → 941.index.js} +3 -1988
  72. package/bin/97.index.js +29 -7
  73. package/bin/main.js +1994 -8
  74. package/bin/shared/KeycloakVersionRange.d.ts +3 -3
  75. package/bin/shared/buildContext.d.ts +52 -16
  76. package/bin/shared/buildContext.js.map +1 -1
  77. package/bin/shared/constants.d.ts +18 -17
  78. package/bin/shared/constants.js +15 -14
  79. package/bin/shared/constants.js.map +1 -1
  80. package/bin/shared/copyKeycloakResourcesToPublic.js.map +1 -1
  81. package/bin/shared/downloadKeycloakDefaultTheme.js.map +1 -1
  82. package/bin/shared/generateKcGenTs.d.ts +3 -0
  83. package/bin/shared/generateKcGenTs.js.map +1 -1
  84. package/bin/shared/getLatestsSemVersionedTag.d.ts +15 -0
  85. package/bin/shared/getLatestsSemVersionedTag.js.map +1 -0
  86. package/bin/shared/promptKeycloakVersion.d.ts +3 -1
  87. package/bin/shared/promptKeycloakVersion.js.map +1 -1
  88. package/lib/getKcClsx.js +2 -1
  89. package/lib/getKcClsx.js.map +1 -1
  90. package/login/KcContext/KcContext.d.ts +10 -11
  91. package/login/KcContext/KcContext.js.map +1 -1
  92. package/login/KcContext/kcContextMocks.js +4 -5
  93. package/login/KcContext/kcContextMocks.js.map +1 -1
  94. package/login/Template.js +13 -7
  95. package/login/Template.js.map +1 -1
  96. package/login/TemplateProps.d.ts +0 -1
  97. package/login/UserProfileFormFields.js +6 -5
  98. package/login/UserProfileFormFields.js.map +1 -1
  99. package/login/i18n/GenericI18n.d.ts +6 -0
  100. package/login/i18n/GenericI18n.js +2 -0
  101. package/login/i18n/GenericI18n.js.map +1 -0
  102. package/login/i18n/i18n.d.ts +22 -32
  103. package/login/i18n/i18n.js +51 -92
  104. package/login/i18n/i18n.js.map +1 -1
  105. package/login/i18n/index.d.ts +4 -3
  106. package/login/i18n/index.js.map +1 -1
  107. package/login/i18n/messages_defaultSet/ar.js.map +1 -0
  108. package/login/i18n/messages_defaultSet/ca.js.map +1 -0
  109. package/login/i18n/messages_defaultSet/cs.js.map +1 -0
  110. package/login/i18n/messages_defaultSet/da.js.map +1 -0
  111. package/login/i18n/messages_defaultSet/de.js.map +1 -0
  112. package/login/i18n/messages_defaultSet/el.js.map +1 -0
  113. package/login/i18n/messages_defaultSet/en.js.map +1 -0
  114. package/login/i18n/messages_defaultSet/es.js.map +1 -0
  115. package/login/i18n/messages_defaultSet/fa.js.map +1 -0
  116. package/login/i18n/messages_defaultSet/fi.js.map +1 -0
  117. package/login/i18n/messages_defaultSet/fr.js.map +1 -0
  118. package/login/i18n/messages_defaultSet/hu.js.map +1 -0
  119. package/login/i18n/{baseMessages → messages_defaultSet}/index.d.ts +1 -1
  120. package/login/i18n/{baseMessages → messages_defaultSet}/index.js +3 -3
  121. package/login/i18n/messages_defaultSet/index.js.map +1 -0
  122. package/login/i18n/messages_defaultSet/it.js.map +1 -0
  123. package/login/i18n/messages_defaultSet/ja.js.map +1 -0
  124. package/login/i18n/messages_defaultSet/lt.js.map +1 -0
  125. package/login/i18n/messages_defaultSet/lv.js.map +1 -0
  126. package/login/i18n/messages_defaultSet/nl.js.map +1 -0
  127. package/login/i18n/messages_defaultSet/no.js.map +1 -0
  128. package/login/i18n/messages_defaultSet/pl.js.map +1 -0
  129. package/login/i18n/messages_defaultSet/pt-BR.js.map +1 -0
  130. package/login/i18n/messages_defaultSet/ru.js.map +1 -0
  131. package/login/i18n/messages_defaultSet/sk.js.map +1 -0
  132. package/login/i18n/messages_defaultSet/sv.js.map +1 -0
  133. package/login/i18n/messages_defaultSet/th.js.map +1 -0
  134. package/login/i18n/messages_defaultSet/tr.js.map +1 -0
  135. package/login/i18n/messages_defaultSet/uk.js.map +1 -0
  136. package/login/i18n/messages_defaultSet/zh-CN.js.map +1 -0
  137. package/login/i18n/useI18n.d.ts +6 -5
  138. package/login/i18n/useI18n.js +37 -4
  139. package/login/i18n/useI18n.js.map +1 -1
  140. package/login/lib/useUserProfileForm.d.ts +2 -0
  141. package/login/lib/useUserProfileForm.js +44 -10
  142. package/login/lib/useUserProfileForm.js.map +1 -1
  143. package/login/pages/Error.js +1 -1
  144. package/login/pages/Error.js.map +1 -1
  145. package/login/pages/Info.js +15 -3
  146. package/login/pages/Info.js.map +1 -1
  147. package/login/pages/Login.js +6 -2
  148. package/login/pages/Login.js.map +1 -1
  149. package/login/pages/LoginConfigTotp.js +5 -1
  150. package/login/pages/LoginConfigTotp.js.map +1 -1
  151. package/login/pages/LoginOtp.js +3 -1
  152. package/login/pages/LoginOtp.js.map +1 -1
  153. package/login/pages/LoginPassword.js +3 -1
  154. package/login/pages/LoginPassword.js.map +1 -1
  155. package/login/pages/LoginRecoveryAuthnCodeInput.js +3 -1
  156. package/login/pages/LoginRecoveryAuthnCodeInput.js.map +1 -1
  157. package/login/pages/LoginResetPassword.js +3 -1
  158. package/login/pages/LoginResetPassword.js.map +1 -1
  159. package/login/pages/LoginUpdatePassword.js +5 -1
  160. package/login/pages/LoginUpdatePassword.js.map +1 -1
  161. package/login/pages/Register.js +3 -1
  162. package/login/pages/Register.js.map +1 -1
  163. package/login/pages/SamlPostForm.js +1 -1
  164. package/login/pages/SamlPostForm.js.map +1 -1
  165. package/login/pages/SelectAuthenticator.js +2 -2
  166. package/login/pages/SelectAuthenticator.js.map +1 -1
  167. package/login/pages/WebauthnAuthenticate.js +3 -3
  168. package/login/pages/WebauthnAuthenticate.js.map +1 -1
  169. package/login/pages/WebauthnRegister.js +2 -2
  170. package/package.json +267 -245
  171. package/src/PUBLIC_URL.ts +2 -2
  172. package/src/account/KcContext/KcContext.ts +4 -1
  173. package/src/account/KcContext/kcContextMocks.ts +7 -4
  174. package/src/account/Template.tsx +6 -1
  175. package/src/account/i18n/GenericI18n.tsx +6 -0
  176. package/src/account/i18n/i18n.tsx +91 -129
  177. package/src/account/i18n/index.ts +4 -3
  178. package/src/account/i18n/{baseMessages → messages_defaultSet}/index.ts +3 -3
  179. package/src/account/i18n/useI18n.tsx +95 -0
  180. package/src/account/pages/Applications.tsx +0 -1
  181. package/src/account/pages/FederatedIdentity.tsx +1 -1
  182. package/src/account/pages/Totp.tsx +16 -6
  183. package/src/bin/add-story.ts +42 -10
  184. package/src/bin/eject-page.ts +119 -11
  185. package/src/bin/initialize-account-theme/copyBoilerplate.ts +32 -0
  186. package/src/bin/initialize-account-theme/index.ts +1 -0
  187. package/src/bin/initialize-account-theme/initialize-account-theme.ts +112 -0
  188. package/src/bin/initialize-account-theme/initializeAccountTheme_multiPage.ts +21 -0
  189. package/src/bin/initialize-account-theme/initializeAccountTheme_singlePage.ts +152 -0
  190. package/src/bin/initialize-account-theme/src/multi-page/KcContext.ts +12 -0
  191. package/src/bin/initialize-account-theme/src/multi-page/KcPage.tsx +25 -0
  192. package/src/bin/initialize-account-theme/src/multi-page/KcPageStory.tsx +38 -0
  193. package/src/bin/initialize-account-theme/src/multi-page/i18n.ts +5 -0
  194. package/src/bin/initialize-account-theme/src/single-page/KcContext.ts +7 -0
  195. package/src/bin/initialize-account-theme/src/single-page/KcPage.tsx +11 -0
  196. package/src/bin/initialize-account-theme/updateAccountThemeImplementationInConfig.ts +92 -0
  197. package/src/bin/initialize-email-theme.ts +1 -1
  198. package/src/bin/keycloakify/buildJars/buildJar.ts +38 -24
  199. package/src/bin/keycloakify/buildJars/buildJars.ts +6 -3
  200. package/src/bin/keycloakify/buildJars/getKeycloakVersionRangeForJar.ts +5 -5
  201. package/src/bin/keycloakify/generateFtl/generateFtl.ts +16 -16
  202. package/src/bin/keycloakify/generateFtl/kcContextDeclarationTemplate.ftl +471 -364
  203. package/src/bin/keycloakify/generateResources/bringInAccountV1.ts +7 -7
  204. package/src/bin/keycloakify/generateResources/generateMessageProperties.ts +3 -3
  205. package/src/bin/keycloakify/generateResources/generateResourcesForMainTheme.ts +125 -59
  206. package/src/bin/keycloakify/generateResources/generateResourcesForThemeVariant.ts +2 -2
  207. package/src/bin/keycloakify/generateResources/readExtraPageNames.ts +5 -8
  208. package/src/bin/keycloakify/keycloakify.ts +8 -6
  209. package/src/bin/keycloakify/replacers/replaceImportsInCssCode.ts +41 -27
  210. package/src/bin/keycloakify/replacers/replaceImportsInJsCode/replaceImportsInJsCode.ts +2 -2
  211. package/src/bin/keycloakify/replacers/replaceImportsInJsCode/vite.ts +6 -6
  212. package/src/bin/keycloakify/replacers/replaceImportsInJsCode/webpack.ts +4 -4
  213. package/src/bin/main.ts +19 -2
  214. package/src/bin/shared/KeycloakVersionRange.ts +4 -4
  215. package/src/bin/shared/buildContext.ts +360 -251
  216. package/src/bin/shared/constants.ts +19 -17
  217. package/src/bin/shared/copyKeycloakResourcesToPublic.ts +6 -6
  218. package/src/bin/shared/downloadKeycloakDefaultTheme.ts +48 -27
  219. package/src/bin/shared/downloadKeycloakStaticResources.ts +2 -2
  220. package/src/bin/shared/generateKcGenTs.ts +110 -3
  221. package/src/bin/shared/getLatestsSemVersionedTag.ts +201 -0
  222. package/src/bin/shared/promptKeycloakVersion.ts +20 -80
  223. package/src/bin/start-keycloak/appBuild.ts +15 -11
  224. package/src/bin/start-keycloak/keycloakifyBuild.ts +3 -3
  225. package/src/bin/start-keycloak/myrealm-realm-18.json +4 -4
  226. package/src/bin/start-keycloak/myrealm-realm-19.json +4 -4
  227. package/src/bin/start-keycloak/myrealm-realm-20.json +4 -4
  228. package/src/bin/start-keycloak/myrealm-realm-21.json +4 -4
  229. package/src/bin/start-keycloak/myrealm-realm-23.json +3 -3
  230. package/src/bin/start-keycloak/myrealm-realm-24.json +4 -4
  231. package/src/bin/start-keycloak/myrealm-realm-25.json +4 -4
  232. package/src/bin/start-keycloak/start-keycloak.ts +256 -102
  233. package/src/bin/tools/assertNoPnpmDlx.ts +17 -0
  234. package/src/bin/tools/downloadAndExtractArchive.ts +10 -9
  235. package/src/bin/tools/fetchProxyOptions.ts +32 -11
  236. package/src/bin/tools/npmInstall.ts +63 -0
  237. package/src/bin/tools/octokit-addons/getLatestsSemVersionedTag.ts +3 -2
  238. package/src/bin/tsconfig.json +3 -1
  239. package/src/lib/getKcClsx.ts +2 -2
  240. package/src/login/KcContext/KcContext.ts +10 -28
  241. package/src/login/KcContext/kcContextMocks.ts +5 -6
  242. package/src/login/Template.tsx +32 -54
  243. package/src/login/TemplateProps.ts +0 -1
  244. package/src/login/UserProfileFormFields.tsx +15 -11
  245. package/src/login/i18n/GenericI18n.tsx +6 -0
  246. package/src/login/i18n/i18n.tsx +91 -166
  247. package/src/login/i18n/index.ts +4 -3
  248. package/src/login/i18n/{baseMessages → messages_defaultSet}/index.ts +3 -3
  249. package/src/login/i18n/useI18n.tsx +95 -0
  250. package/src/login/lib/useUserProfileForm.tsx +68 -20
  251. package/src/login/pages/Error.tsx +1 -1
  252. package/src/login/pages/Info.tsx +26 -6
  253. package/src/login/pages/Login.tsx +20 -9
  254. package/src/login/pages/LoginConfigTotp.tsx +16 -6
  255. package/src/login/pages/LoginOtp.tsx +8 -3
  256. package/src/login/pages/LoginPassword.tsx +8 -3
  257. package/src/login/pages/LoginRecoveryAuthnCodeInput.tsx +8 -3
  258. package/src/login/pages/LoginResetPassword.tsx +8 -3
  259. package/src/login/pages/LoginUpdatePassword.tsx +55 -47
  260. package/src/login/pages/Register.tsx +8 -3
  261. package/src/login/pages/SamlPostForm.tsx +1 -1
  262. package/src/login/pages/SelectAuthenticator.tsx +4 -4
  263. package/src/login/pages/WebauthnAuthenticate.tsx +5 -5
  264. package/src/login/pages/WebauthnRegister.tsx +2 -2
  265. package/src/tools/useInsertLinkTags.ts +9 -1
  266. package/src/tools/useInsertScriptTags.ts +9 -1
  267. package/src/vite-plugin/vite-plugin.ts +15 -13
  268. package/stories/account/pages/Applications.stories.tsx +80 -0
  269. package/stories/account/pages/Log.stories.tsx +1 -0
  270. package/stories/account-spa/index.stories.tsx +94 -0
  271. package/stories/intro/intro.stories.tsx +90 -0
  272. package/stories/login/pages/Info.stories.tsx +7 -2
  273. package/stories/login/pages/Login.stories.tsx +25 -13
  274. package/stories/login/pages/Register.stories.tsx +11 -9
  275. package/stories/login/pages/SelectAuthenticator.stories.tsx +41 -0
  276. package/stories/login/pages/Terms.stories.tsx +6 -2
  277. package/tools/useInsertLinkTags.js +7 -1
  278. package/tools/useInsertLinkTags.js.map +1 -1
  279. package/tools/useInsertScriptTags.js +7 -1
  280. package/tools/useInsertScriptTags.js.map +1 -1
  281. package/vite-plugin/index.js +25820 -25686
  282. package/vite-plugin/vite-plugin.d.ts +6 -4
  283. package/account/i18n/baseMessages/ar.js.map +0 -1
  284. package/account/i18n/baseMessages/ca.js.map +0 -1
  285. package/account/i18n/baseMessages/cs.js.map +0 -1
  286. package/account/i18n/baseMessages/da.js.map +0 -1
  287. package/account/i18n/baseMessages/de.js.map +0 -1
  288. package/account/i18n/baseMessages/el.js.map +0 -1
  289. package/account/i18n/baseMessages/en.js.map +0 -1
  290. package/account/i18n/baseMessages/es.js.map +0 -1
  291. package/account/i18n/baseMessages/fa.js.map +0 -1
  292. package/account/i18n/baseMessages/fi.js.map +0 -1
  293. package/account/i18n/baseMessages/fr.js.map +0 -1
  294. package/account/i18n/baseMessages/hu.js.map +0 -1
  295. package/account/i18n/baseMessages/index.js.map +0 -1
  296. package/account/i18n/baseMessages/it.js.map +0 -1
  297. package/account/i18n/baseMessages/ja.js.map +0 -1
  298. package/account/i18n/baseMessages/lt.js.map +0 -1
  299. package/account/i18n/baseMessages/lv.js.map +0 -1
  300. package/account/i18n/baseMessages/nl.js.map +0 -1
  301. package/account/i18n/baseMessages/no.js.map +0 -1
  302. package/account/i18n/baseMessages/pl.js.map +0 -1
  303. package/account/i18n/baseMessages/pt-BR.js.map +0 -1
  304. package/account/i18n/baseMessages/ru.js.map +0 -1
  305. package/account/i18n/baseMessages/sk.js.map +0 -1
  306. package/account/i18n/baseMessages/sv.js.map +0 -1
  307. package/account/i18n/baseMessages/th.js.map +0 -1
  308. package/account/i18n/baseMessages/tr.js.map +0 -1
  309. package/account/i18n/baseMessages/uk.js.map +0 -1
  310. package/account/i18n/baseMessages/zh-CN.js.map +0 -1
  311. package/bin/538.index.js +0 -108
  312. package/login/i18n/baseMessages/ar.js.map +0 -1
  313. package/login/i18n/baseMessages/ca.js.map +0 -1
  314. package/login/i18n/baseMessages/cs.js.map +0 -1
  315. package/login/i18n/baseMessages/da.js.map +0 -1
  316. package/login/i18n/baseMessages/de.js.map +0 -1
  317. package/login/i18n/baseMessages/el.js.map +0 -1
  318. package/login/i18n/baseMessages/en.js.map +0 -1
  319. package/login/i18n/baseMessages/es.js.map +0 -1
  320. package/login/i18n/baseMessages/fa.js.map +0 -1
  321. package/login/i18n/baseMessages/fi.js.map +0 -1
  322. package/login/i18n/baseMessages/fr.js.map +0 -1
  323. package/login/i18n/baseMessages/hu.js.map +0 -1
  324. package/login/i18n/baseMessages/index.js.map +0 -1
  325. package/login/i18n/baseMessages/it.js.map +0 -1
  326. package/login/i18n/baseMessages/ja.js.map +0 -1
  327. package/login/i18n/baseMessages/lt.js.map +0 -1
  328. package/login/i18n/baseMessages/lv.js.map +0 -1
  329. package/login/i18n/baseMessages/nl.js.map +0 -1
  330. package/login/i18n/baseMessages/no.js.map +0 -1
  331. package/login/i18n/baseMessages/pl.js.map +0 -1
  332. package/login/i18n/baseMessages/pt-BR.js.map +0 -1
  333. package/login/i18n/baseMessages/ru.js.map +0 -1
  334. package/login/i18n/baseMessages/sk.js.map +0 -1
  335. package/login/i18n/baseMessages/sv.js.map +0 -1
  336. package/login/i18n/baseMessages/th.js.map +0 -1
  337. package/login/i18n/baseMessages/tr.js.map +0 -1
  338. package/login/i18n/baseMessages/uk.js.map +0 -1
  339. package/login/i18n/baseMessages/zh-CN.js.map +0 -1
  340. package/src/account/i18n/useI18n.ts +0 -44
  341. package/src/login/i18n/useI18n.ts +0 -44
  342. package/src/tools/ExtractAfterStartingWith.ts +0 -4
  343. package/tools/ExtractAfterStartingWith.d.ts +0 -1
  344. package/tools/ExtractAfterStartingWith.js +0 -2
  345. package/tools/ExtractAfterStartingWith.js.map +0 -1
  346. /package/account/i18n/{baseMessages → messages_defaultSet}/ar.d.ts +0 -0
  347. /package/account/i18n/{baseMessages → messages_defaultSet}/ar.js +0 -0
  348. /package/account/i18n/{baseMessages → messages_defaultSet}/ca.d.ts +0 -0
  349. /package/account/i18n/{baseMessages → messages_defaultSet}/ca.js +0 -0
  350. /package/account/i18n/{baseMessages → messages_defaultSet}/cs.d.ts +0 -0
  351. /package/account/i18n/{baseMessages → messages_defaultSet}/cs.js +0 -0
  352. /package/account/i18n/{baseMessages → messages_defaultSet}/da.d.ts +0 -0
  353. /package/account/i18n/{baseMessages → messages_defaultSet}/da.js +0 -0
  354. /package/account/i18n/{baseMessages → messages_defaultSet}/de.d.ts +0 -0
  355. /package/account/i18n/{baseMessages → messages_defaultSet}/de.js +0 -0
  356. /package/account/i18n/{baseMessages → messages_defaultSet}/el.d.ts +0 -0
  357. /package/account/i18n/{baseMessages → messages_defaultSet}/el.js +0 -0
  358. /package/account/i18n/{baseMessages → messages_defaultSet}/en.d.ts +0 -0
  359. /package/account/i18n/{baseMessages → messages_defaultSet}/en.js +0 -0
  360. /package/account/i18n/{baseMessages → messages_defaultSet}/es.d.ts +0 -0
  361. /package/account/i18n/{baseMessages → messages_defaultSet}/es.js +0 -0
  362. /package/account/i18n/{baseMessages → messages_defaultSet}/fa.d.ts +0 -0
  363. /package/account/i18n/{baseMessages → messages_defaultSet}/fa.js +0 -0
  364. /package/account/i18n/{baseMessages → messages_defaultSet}/fi.d.ts +0 -0
  365. /package/account/i18n/{baseMessages → messages_defaultSet}/fi.js +0 -0
  366. /package/account/i18n/{baseMessages → messages_defaultSet}/fr.d.ts +0 -0
  367. /package/account/i18n/{baseMessages → messages_defaultSet}/fr.js +0 -0
  368. /package/account/i18n/{baseMessages → messages_defaultSet}/hu.d.ts +0 -0
  369. /package/account/i18n/{baseMessages → messages_defaultSet}/hu.js +0 -0
  370. /package/account/i18n/{baseMessages → messages_defaultSet}/it.d.ts +0 -0
  371. /package/account/i18n/{baseMessages → messages_defaultSet}/it.js +0 -0
  372. /package/account/i18n/{baseMessages → messages_defaultSet}/ja.d.ts +0 -0
  373. /package/account/i18n/{baseMessages → messages_defaultSet}/ja.js +0 -0
  374. /package/account/i18n/{baseMessages → messages_defaultSet}/lt.d.ts +0 -0
  375. /package/account/i18n/{baseMessages → messages_defaultSet}/lt.js +0 -0
  376. /package/account/i18n/{baseMessages → messages_defaultSet}/lv.d.ts +0 -0
  377. /package/account/i18n/{baseMessages → messages_defaultSet}/lv.js +0 -0
  378. /package/account/i18n/{baseMessages → messages_defaultSet}/nl.d.ts +0 -0
  379. /package/account/i18n/{baseMessages → messages_defaultSet}/nl.js +0 -0
  380. /package/account/i18n/{baseMessages → messages_defaultSet}/no.d.ts +0 -0
  381. /package/account/i18n/{baseMessages → messages_defaultSet}/no.js +0 -0
  382. /package/account/i18n/{baseMessages → messages_defaultSet}/pl.d.ts +0 -0
  383. /package/account/i18n/{baseMessages → messages_defaultSet}/pl.js +0 -0
  384. /package/account/i18n/{baseMessages → messages_defaultSet}/pt-BR.d.ts +0 -0
  385. /package/account/i18n/{baseMessages → messages_defaultSet}/pt-BR.js +0 -0
  386. /package/account/i18n/{baseMessages → messages_defaultSet}/ru.d.ts +0 -0
  387. /package/account/i18n/{baseMessages → messages_defaultSet}/ru.js +0 -0
  388. /package/account/i18n/{baseMessages → messages_defaultSet}/sk.d.ts +0 -0
  389. /package/account/i18n/{baseMessages → messages_defaultSet}/sk.js +0 -0
  390. /package/account/i18n/{baseMessages → messages_defaultSet}/sv.d.ts +0 -0
  391. /package/account/i18n/{baseMessages → messages_defaultSet}/sv.js +0 -0
  392. /package/account/i18n/{baseMessages → messages_defaultSet}/th.d.ts +0 -0
  393. /package/account/i18n/{baseMessages → messages_defaultSet}/th.js +0 -0
  394. /package/account/i18n/{baseMessages → messages_defaultSet}/tr.d.ts +0 -0
  395. /package/account/i18n/{baseMessages → messages_defaultSet}/tr.js +0 -0
  396. /package/account/i18n/{baseMessages → messages_defaultSet}/uk.d.ts +0 -0
  397. /package/account/i18n/{baseMessages → messages_defaultSet}/uk.js +0 -0
  398. /package/account/i18n/{baseMessages → messages_defaultSet}/zh-CN.d.ts +0 -0
  399. /package/account/i18n/{baseMessages → messages_defaultSet}/zh-CN.js +0 -0
  400. /package/login/i18n/{baseMessages → messages_defaultSet}/ar.d.ts +0 -0
  401. /package/login/i18n/{baseMessages → messages_defaultSet}/ar.js +0 -0
  402. /package/login/i18n/{baseMessages → messages_defaultSet}/ca.d.ts +0 -0
  403. /package/login/i18n/{baseMessages → messages_defaultSet}/ca.js +0 -0
  404. /package/login/i18n/{baseMessages → messages_defaultSet}/cs.d.ts +0 -0
  405. /package/login/i18n/{baseMessages → messages_defaultSet}/cs.js +0 -0
  406. /package/login/i18n/{baseMessages → messages_defaultSet}/da.d.ts +0 -0
  407. /package/login/i18n/{baseMessages → messages_defaultSet}/da.js +0 -0
  408. /package/login/i18n/{baseMessages → messages_defaultSet}/de.d.ts +0 -0
  409. /package/login/i18n/{baseMessages → messages_defaultSet}/de.js +0 -0
  410. /package/login/i18n/{baseMessages → messages_defaultSet}/el.d.ts +0 -0
  411. /package/login/i18n/{baseMessages → messages_defaultSet}/el.js +0 -0
  412. /package/login/i18n/{baseMessages → messages_defaultSet}/en.d.ts +0 -0
  413. /package/login/i18n/{baseMessages → messages_defaultSet}/en.js +0 -0
  414. /package/login/i18n/{baseMessages → messages_defaultSet}/es.d.ts +0 -0
  415. /package/login/i18n/{baseMessages → messages_defaultSet}/es.js +0 -0
  416. /package/login/i18n/{baseMessages → messages_defaultSet}/fa.d.ts +0 -0
  417. /package/login/i18n/{baseMessages → messages_defaultSet}/fa.js +0 -0
  418. /package/login/i18n/{baseMessages → messages_defaultSet}/fi.d.ts +0 -0
  419. /package/login/i18n/{baseMessages → messages_defaultSet}/fi.js +0 -0
  420. /package/login/i18n/{baseMessages → messages_defaultSet}/fr.d.ts +0 -0
  421. /package/login/i18n/{baseMessages → messages_defaultSet}/fr.js +0 -0
  422. /package/login/i18n/{baseMessages → messages_defaultSet}/hu.d.ts +0 -0
  423. /package/login/i18n/{baseMessages → messages_defaultSet}/hu.js +0 -0
  424. /package/login/i18n/{baseMessages → messages_defaultSet}/it.d.ts +0 -0
  425. /package/login/i18n/{baseMessages → messages_defaultSet}/it.js +0 -0
  426. /package/login/i18n/{baseMessages → messages_defaultSet}/ja.d.ts +0 -0
  427. /package/login/i18n/{baseMessages → messages_defaultSet}/ja.js +0 -0
  428. /package/login/i18n/{baseMessages → messages_defaultSet}/lt.d.ts +0 -0
  429. /package/login/i18n/{baseMessages → messages_defaultSet}/lt.js +0 -0
  430. /package/login/i18n/{baseMessages → messages_defaultSet}/lv.d.ts +0 -0
  431. /package/login/i18n/{baseMessages → messages_defaultSet}/lv.js +0 -0
  432. /package/login/i18n/{baseMessages → messages_defaultSet}/nl.d.ts +0 -0
  433. /package/login/i18n/{baseMessages → messages_defaultSet}/nl.js +0 -0
  434. /package/login/i18n/{baseMessages → messages_defaultSet}/no.d.ts +0 -0
  435. /package/login/i18n/{baseMessages → messages_defaultSet}/no.js +0 -0
  436. /package/login/i18n/{baseMessages → messages_defaultSet}/pl.d.ts +0 -0
  437. /package/login/i18n/{baseMessages → messages_defaultSet}/pl.js +0 -0
  438. /package/login/i18n/{baseMessages → messages_defaultSet}/pt-BR.d.ts +0 -0
  439. /package/login/i18n/{baseMessages → messages_defaultSet}/pt-BR.js +0 -0
  440. /package/login/i18n/{baseMessages → messages_defaultSet}/ru.d.ts +0 -0
  441. /package/login/i18n/{baseMessages → messages_defaultSet}/ru.js +0 -0
  442. /package/login/i18n/{baseMessages → messages_defaultSet}/sk.d.ts +0 -0
  443. /package/login/i18n/{baseMessages → messages_defaultSet}/sk.js +0 -0
  444. /package/login/i18n/{baseMessages → messages_defaultSet}/sv.d.ts +0 -0
  445. /package/login/i18n/{baseMessages → messages_defaultSet}/sv.js +0 -0
  446. /package/login/i18n/{baseMessages → messages_defaultSet}/th.d.ts +0 -0
  447. /package/login/i18n/{baseMessages → messages_defaultSet}/th.js +0 -0
  448. /package/login/i18n/{baseMessages → messages_defaultSet}/tr.d.ts +0 -0
  449. /package/login/i18n/{baseMessages → messages_defaultSet}/tr.js +0 -0
  450. /package/login/i18n/{baseMessages → messages_defaultSet}/uk.d.ts +0 -0
  451. /package/login/i18n/{baseMessages → messages_defaultSet}/uk.js +0 -0
  452. /package/login/i18n/{baseMessages → messages_defaultSet}/zh-CN.d.ts +0 -0
  453. /package/login/i18n/{baseMessages → messages_defaultSet}/zh-CN.js +0 -0
  454. /package/src/account/i18n/{baseMessages → messages_defaultSet}/ar.ts +0 -0
  455. /package/src/account/i18n/{baseMessages → messages_defaultSet}/ca.ts +0 -0
  456. /package/src/account/i18n/{baseMessages → messages_defaultSet}/cs.ts +0 -0
  457. /package/src/account/i18n/{baseMessages → messages_defaultSet}/da.ts +0 -0
  458. /package/src/account/i18n/{baseMessages → messages_defaultSet}/de.ts +0 -0
  459. /package/src/account/i18n/{baseMessages → messages_defaultSet}/el.ts +0 -0
  460. /package/src/account/i18n/{baseMessages → messages_defaultSet}/en.ts +0 -0
  461. /package/src/account/i18n/{baseMessages → messages_defaultSet}/es.ts +0 -0
  462. /package/src/account/i18n/{baseMessages → messages_defaultSet}/fa.ts +0 -0
  463. /package/src/account/i18n/{baseMessages → messages_defaultSet}/fi.ts +0 -0
  464. /package/src/account/i18n/{baseMessages → messages_defaultSet}/fr.ts +0 -0
  465. /package/src/account/i18n/{baseMessages → messages_defaultSet}/hu.ts +0 -0
  466. /package/src/account/i18n/{baseMessages → messages_defaultSet}/it.ts +0 -0
  467. /package/src/account/i18n/{baseMessages → messages_defaultSet}/ja.ts +0 -0
  468. /package/src/account/i18n/{baseMessages → messages_defaultSet}/lt.ts +0 -0
  469. /package/src/account/i18n/{baseMessages → messages_defaultSet}/lv.ts +0 -0
  470. /package/src/account/i18n/{baseMessages → messages_defaultSet}/nl.ts +0 -0
  471. /package/src/account/i18n/{baseMessages → messages_defaultSet}/no.ts +0 -0
  472. /package/src/account/i18n/{baseMessages → messages_defaultSet}/pl.ts +0 -0
  473. /package/src/account/i18n/{baseMessages → messages_defaultSet}/pt-BR.ts +0 -0
  474. /package/src/account/i18n/{baseMessages → messages_defaultSet}/ru.ts +0 -0
  475. /package/src/account/i18n/{baseMessages → messages_defaultSet}/sk.ts +0 -0
  476. /package/src/account/i18n/{baseMessages → messages_defaultSet}/sv.ts +0 -0
  477. /package/src/account/i18n/{baseMessages → messages_defaultSet}/th.ts +0 -0
  478. /package/src/account/i18n/{baseMessages → messages_defaultSet}/tr.ts +0 -0
  479. /package/src/account/i18n/{baseMessages → messages_defaultSet}/uk.ts +0 -0
  480. /package/src/account/i18n/{baseMessages → messages_defaultSet}/zh-CN.ts +0 -0
  481. /package/src/login/i18n/{baseMessages → messages_defaultSet}/ar.ts +0 -0
  482. /package/src/login/i18n/{baseMessages → messages_defaultSet}/ca.ts +0 -0
  483. /package/src/login/i18n/{baseMessages → messages_defaultSet}/cs.ts +0 -0
  484. /package/src/login/i18n/{baseMessages → messages_defaultSet}/da.ts +0 -0
  485. /package/src/login/i18n/{baseMessages → messages_defaultSet}/de.ts +0 -0
  486. /package/src/login/i18n/{baseMessages → messages_defaultSet}/el.ts +0 -0
  487. /package/src/login/i18n/{baseMessages → messages_defaultSet}/en.ts +0 -0
  488. /package/src/login/i18n/{baseMessages → messages_defaultSet}/es.ts +0 -0
  489. /package/src/login/i18n/{baseMessages → messages_defaultSet}/fa.ts +0 -0
  490. /package/src/login/i18n/{baseMessages → messages_defaultSet}/fi.ts +0 -0
  491. /package/src/login/i18n/{baseMessages → messages_defaultSet}/fr.ts +0 -0
  492. /package/src/login/i18n/{baseMessages → messages_defaultSet}/hu.ts +0 -0
  493. /package/src/login/i18n/{baseMessages → messages_defaultSet}/it.ts +0 -0
  494. /package/src/login/i18n/{baseMessages → messages_defaultSet}/ja.ts +0 -0
  495. /package/src/login/i18n/{baseMessages → messages_defaultSet}/lt.ts +0 -0
  496. /package/src/login/i18n/{baseMessages → messages_defaultSet}/lv.ts +0 -0
  497. /package/src/login/i18n/{baseMessages → messages_defaultSet}/nl.ts +0 -0
  498. /package/src/login/i18n/{baseMessages → messages_defaultSet}/no.ts +0 -0
  499. /package/src/login/i18n/{baseMessages → messages_defaultSet}/pl.ts +0 -0
  500. /package/src/login/i18n/{baseMessages → messages_defaultSet}/pt-BR.ts +0 -0
  501. /package/src/login/i18n/{baseMessages → messages_defaultSet}/ru.ts +0 -0
  502. /package/src/login/i18n/{baseMessages → messages_defaultSet}/sk.ts +0 -0
  503. /package/src/login/i18n/{baseMessages → messages_defaultSet}/sv.ts +0 -0
  504. /package/src/login/i18n/{baseMessages → messages_defaultSet}/th.ts +0 -0
  505. /package/src/login/i18n/{baseMessages → messages_defaultSet}/tr.ts +0 -0
  506. /package/src/login/i18n/{baseMessages → messages_defaultSet}/uk.ts +0 -0
  507. /package/src/login/i18n/{baseMessages → messages_defaultSet}/zh-CN.ts +0 -0
@@ -3,9 +3,9 @@ import { join as pathJoin } from "path";
3
3
  import { assert } from "tsafe/assert";
4
4
  import type { BuildContext } from "../../shared/buildContext";
5
5
  import {
6
- resources_common,
7
- lastKeycloakVersionWithAccountV1,
8
- accountV1ThemeName
6
+ RESOURCES_COMMON,
7
+ LAST_KEYCLOAK_VERSION_WITH_ACCOUNT_V1,
8
+ ACCOUNT_V1_THEME_NAME
9
9
  } from "../../shared/constants";
10
10
  import {
11
11
  downloadKeycloakDefaultTheme,
@@ -24,14 +24,14 @@ export async function bringInAccountV1(params: {
24
24
  const { resourcesDirPath, buildContext } = params;
25
25
 
26
26
  const { defaultThemeDirPath } = await downloadKeycloakDefaultTheme({
27
- keycloakVersion: lastKeycloakVersionWithAccountV1,
27
+ keycloakVersion: LAST_KEYCLOAK_VERSION_WITH_ACCOUNT_V1,
28
28
  buildContext
29
29
  });
30
30
 
31
31
  const accountV1DirPath = pathJoin(
32
32
  resourcesDirPath,
33
33
  "theme",
34
- accountV1ThemeName,
34
+ ACCOUNT_V1_THEME_NAME,
35
35
  "account"
36
36
  );
37
37
 
@@ -47,7 +47,7 @@ export async function bringInAccountV1(params: {
47
47
 
48
48
  transformCodebase({
49
49
  srcDirPath: pathJoin(defaultThemeDirPath, "keycloak", "common", "resources"),
50
- destDirPath: pathJoin(accountV1DirPath, "resources", resources_common)
50
+ destDirPath: pathJoin(accountV1DirPath, "resources", RESOURCES_COMMON)
51
51
  });
52
52
 
53
53
  fs.writeFileSync(
@@ -69,7 +69,7 @@ export async function bringInAccountV1(params: {
69
69
  "patternfly-additions.min.css"
70
70
  ].map(
71
71
  fileBasename =>
72
- `${resources_common}/node_modules/patternfly/dist/css/${fileBasename}`
72
+ `${RESOURCES_COMMON}/node_modules/patternfly/dist/css/${fileBasename}`
73
73
  )
74
74
  ].join(" "),
75
75
  "",
@@ -1,4 +1,4 @@
1
- import { type ThemeType, fallbackLanguageTag } from "../../shared/constants";
1
+ import { type ThemeType, FALLBACK_LANGUAGE_TAG } from "../../shared/constants";
2
2
  import { crawl } from "../../tools/crawl";
3
3
  import { join as pathJoin } from "path";
4
4
  import { symToStr } from "tsafe/symToStr";
@@ -22,7 +22,7 @@ export function generateMessageProperties(params: {
22
22
  "src",
23
23
  themeType,
24
24
  "i18n",
25
- "baseMessages"
25
+ "messages_defaultSet"
26
26
  );
27
27
 
28
28
  const baseMessageBundle: { [languageTag: string]: Record<string, string> } =
@@ -168,7 +168,7 @@ export function generateMessageProperties(params: {
168
168
  ...(messageBundle === undefined
169
169
  ? {}
170
170
  : messageBundle[languageTag] ??
171
- messageBundle[fallbackLanguageTag] ??
171
+ messageBundle[FALLBACK_LANGUAGE_TAG] ??
172
172
  messageBundle[Object.keys(messageBundle)[0]] ??
173
173
  {})
174
174
  }
@@ -4,7 +4,8 @@ import {
4
4
  join as pathJoin,
5
5
  resolve as pathResolve,
6
6
  relative as pathRelative,
7
- dirname as pathDirname
7
+ dirname as pathDirname,
8
+ basename as pathBasename
8
9
  } from "path";
9
10
  import { replaceImportsInJsCode } from "../replacers/replaceImportsInJsCode";
10
11
  import { replaceImportsInCssCode } from "../replacers/replaceImportsInCssCode";
@@ -14,12 +15,12 @@ import {
14
15
  } from "../generateFtl";
15
16
  import {
16
17
  type ThemeType,
17
- lastKeycloakVersionWithAccountV1,
18
- keycloak_resources,
19
- accountV1ThemeName,
20
- basenameOfTheKeycloakifyResourcesDir,
21
- loginThemePageIds,
22
- accountThemePageIds
18
+ LAST_KEYCLOAK_VERSION_WITH_ACCOUNT_V1,
19
+ KEYCLOAK_RESOURCES,
20
+ ACCOUNT_V1_THEME_NAME,
21
+ BASENAME_OF_KEYCLOAKIFY_RESOURCES_DIR,
22
+ LOGIN_THEME_PAGE_IDS,
23
+ ACCOUNT_THEME_PAGE_IDS
23
24
  } from "../../shared/constants";
24
25
  import type { BuildContext } from "../../shared/buildContext";
25
26
  import { assert, type Equals } from "tsafe/assert";
@@ -42,6 +43,7 @@ import {
42
43
  } from "../../shared/metaInfKeycloakThemes";
43
44
  import { objectEntries } from "tsafe/objectEntries";
44
45
  import { escapeStringForPropertiesFile } from "../../tools/escapeStringForPropertiesFile";
46
+ import { downloadAndExtractArchive } from "../../tools/downloadAndExtractArchive";
45
47
 
46
48
  export type BuildContextLike = BuildContextLike_kcContextExclusionsFtlCode &
47
49
  BuildContextLike_downloadKeycloakStaticResources &
@@ -51,9 +53,9 @@ export type BuildContextLike = BuildContextLike_kcContextExclusionsFtlCode &
51
53
  projectDirPath: string;
52
54
  projectBuildDirPath: string;
53
55
  environmentVariables: { name: string; default: string }[];
54
- recordIsImplementedByThemeType: BuildContext["recordIsImplementedByThemeType"];
56
+ implementedThemeTypes: BuildContext["implementedThemeTypes"];
55
57
  themeSrcDirPath: string;
56
- bundler: { type: "vite" } | { type: "webpack" };
58
+ bundler: "vite" | "webpack";
57
59
  };
58
60
 
59
61
  assert<BuildContext extends BuildContextLike ? true : false>();
@@ -71,17 +73,22 @@ export async function generateResourcesForMainTheme(params: {
71
73
  };
72
74
 
73
75
  for (const themeType of ["login", "account"] as const) {
74
- if (!buildContext.recordIsImplementedByThemeType[themeType]) {
76
+ if (!buildContext.implementedThemeTypes[themeType].isImplemented) {
75
77
  continue;
76
78
  }
77
79
 
80
+ const isForAccountSpa =
81
+ themeType === "account" &&
82
+ (assert(buildContext.implementedThemeTypes.account.isImplemented),
83
+ buildContext.implementedThemeTypes.account.type === "Single-Page");
84
+
78
85
  const themeTypeDirPath = getThemeTypeDirPath({ themeType });
79
86
 
80
87
  apply_replacers_and_move_to_theme_resources: {
81
88
  const destDirPath = pathJoin(
82
89
  themeTypeDirPath,
83
90
  "resources",
84
- basenameOfTheKeycloakifyResourcesDir
91
+ BASENAME_OF_KEYCLOAKIFY_RESOURCES_DIR
85
92
  );
86
93
 
87
94
  // NOTE: Prevent accumulation of files in the assets dir, as names are hashed they pile up.
@@ -89,7 +96,7 @@ export async function generateResourcesForMainTheme(params: {
89
96
 
90
97
  if (
91
98
  themeType === "account" &&
92
- buildContext.recordIsImplementedByThemeType.login
99
+ buildContext.implementedThemeTypes.login.isImplemented
93
100
  ) {
94
101
  // NOTE: We prevent doing it twice, it has been done for the login theme.
95
102
 
@@ -99,7 +106,7 @@ export async function generateResourcesForMainTheme(params: {
99
106
  themeType: "login"
100
107
  }),
101
108
  "resources",
102
- basenameOfTheKeycloakifyResourcesDir
109
+ BASENAME_OF_KEYCLOAKIFY_RESOURCES_DIR
103
110
  ),
104
111
  destDirPath
105
112
  });
@@ -110,15 +117,15 @@ export async function generateResourcesForMainTheme(params: {
110
117
  {
111
118
  const dirPath = pathJoin(
112
119
  buildContext.projectBuildDirPath,
113
- keycloak_resources
120
+ KEYCLOAK_RESOURCES
114
121
  );
115
122
 
116
123
  if (fs.existsSync(dirPath)) {
117
- assert(buildContext.bundler.type === "webpack");
124
+ assert(buildContext.bundler === "webpack");
118
125
 
119
126
  throw new Error(
120
127
  [
121
- `Keycloakify build error: The ${keycloak_resources} directory shouldn't exist in your build directory.`,
128
+ `Keycloakify build error: The ${KEYCLOAK_RESOURCES} directory shouldn't exist in your build directory.`,
122
129
  `(${pathRelative(process.cwd(), dirPath)}).\n`,
123
130
  `Theses assets are only required for local development with Storybook.",
124
131
  "Please remove this directory as an additional step of your command.\n`,
@@ -178,15 +185,17 @@ export async function generateResourcesForMainTheme(params: {
178
185
  ...(() => {
179
186
  switch (themeType) {
180
187
  case "login":
181
- return loginThemePageIds;
188
+ return LOGIN_THEME_PAGE_IDS;
182
189
  case "account":
183
- return accountThemePageIds;
190
+ return isForAccountSpa ? ["index.ftl"] : ACCOUNT_THEME_PAGE_IDS;
184
191
  }
185
192
  })(),
186
- ...readExtraPagesNames({
187
- themeType,
188
- themeSrcDirPath: buildContext.themeSrcDirPath
189
- })
193
+ ...(isForAccountSpa
194
+ ? []
195
+ : readExtraPagesNames({
196
+ themeType,
197
+ themeSrcDirPath: buildContext.themeSrcDirPath
198
+ }))
190
199
  ].forEach(pageId => {
191
200
  const { ftlCode } = generateFtlFilesCode({ pageId });
192
201
 
@@ -196,40 +205,52 @@ export async function generateResourcesForMainTheme(params: {
196
205
  );
197
206
  });
198
207
 
199
- generateMessageProperties({
200
- themeSrcDirPath: buildContext.themeSrcDirPath,
201
- themeType
202
- }).forEach(({ languageTag, propertiesFileSource }) => {
203
- const messagesDirPath = pathJoin(themeTypeDirPath, "messages");
208
+ i18n_messages_generation: {
209
+ if (isForAccountSpa) {
210
+ break i18n_messages_generation;
211
+ }
204
212
 
205
- fs.mkdirSync(pathJoin(themeTypeDirPath, "messages"), {
206
- recursive: true
207
- });
213
+ generateMessageProperties({
214
+ themeSrcDirPath: buildContext.themeSrcDirPath,
215
+ themeType
216
+ }).forEach(({ languageTag, propertiesFileSource }) => {
217
+ const messagesDirPath = pathJoin(themeTypeDirPath, "messages");
208
218
 
209
- const propertiesFilePath = pathJoin(
210
- messagesDirPath,
211
- `messages_${languageTag}.properties`
212
- );
219
+ fs.mkdirSync(pathJoin(themeTypeDirPath, "messages"), {
220
+ recursive: true
221
+ });
213
222
 
214
- fs.writeFileSync(
215
- propertiesFilePath,
216
- Buffer.from(propertiesFileSource, "utf8")
217
- );
218
- });
223
+ const propertiesFilePath = pathJoin(
224
+ messagesDirPath,
225
+ `messages_${languageTag}.properties`
226
+ );
219
227
 
220
- await downloadKeycloakStaticResources({
221
- keycloakVersion: (() => {
222
- switch (themeType) {
223
- case "account":
224
- return lastKeycloakVersionWithAccountV1;
225
- case "login":
226
- return buildContext.loginThemeResourcesFromKeycloakVersion;
227
- }
228
- })(),
229
- themeDirPath: pathResolve(pathJoin(themeTypeDirPath, "..")),
230
- themeType,
231
- buildContext
232
- });
228
+ fs.writeFileSync(
229
+ propertiesFilePath,
230
+ Buffer.from(propertiesFileSource, "utf8")
231
+ );
232
+ });
233
+ }
234
+
235
+ keycloak_static_resources: {
236
+ if (isForAccountSpa) {
237
+ break keycloak_static_resources;
238
+ }
239
+
240
+ await downloadKeycloakStaticResources({
241
+ keycloakVersion: (() => {
242
+ switch (themeType) {
243
+ case "account":
244
+ return LAST_KEYCLOAK_VERSION_WITH_ACCOUNT_V1;
245
+ case "login":
246
+ return buildContext.loginThemeResourcesFromKeycloakVersion;
247
+ }
248
+ })(),
249
+ themeDirPath: pathResolve(pathJoin(themeTypeDirPath, "..")),
250
+ themeType,
251
+ buildContext
252
+ });
253
+ }
233
254
 
234
255
  fs.writeFileSync(
235
256
  pathJoin(themeTypeDirPath, "theme.properties"),
@@ -238,12 +259,13 @@ export async function generateResourcesForMainTheme(params: {
238
259
  `parent=${(() => {
239
260
  switch (themeType) {
240
261
  case "account":
241
- return accountV1ThemeName;
262
+ return isForAccountSpa ? "base" : ACCOUNT_V1_THEME_NAME;
242
263
  case "login":
243
264
  return "keycloak";
244
265
  }
245
266
  assert<Equals<typeof themeType, never>>(false);
246
267
  })()}`,
268
+ ...(isForAccountSpa ? ["deprecatedMode=false"] : []),
247
269
  ...(buildContext.extraThemeProperties ?? []),
248
270
  ...buildContext.environmentVariables.map(
249
271
  ({ name, default: defaultValue }) =>
@@ -256,7 +278,7 @@ export async function generateResourcesForMainTheme(params: {
256
278
  }
257
279
 
258
280
  email: {
259
- if (!buildContext.recordIsImplementedByThemeType.email) {
281
+ if (!buildContext.implementedThemeTypes.email.isImplemented) {
260
282
  break email;
261
283
  }
262
284
 
@@ -268,26 +290,70 @@ export async function generateResourcesForMainTheme(params: {
268
290
  });
269
291
  }
270
292
 
271
- if (buildContext.recordIsImplementedByThemeType.account) {
293
+ bring_in_account_v1: {
294
+ if (!buildContext.implementedThemeTypes.account.isImplemented) {
295
+ break bring_in_account_v1;
296
+ }
297
+
298
+ if (buildContext.implementedThemeTypes.account.type !== "Multi-Page") {
299
+ break bring_in_account_v1;
300
+ }
301
+
272
302
  await bringInAccountV1({
273
303
  resourcesDirPath,
274
304
  buildContext
275
305
  });
276
306
  }
277
307
 
308
+ bring_in_account_v3_i18n_messages: {
309
+ if (!buildContext.implementedThemeTypes.account.isImplemented) {
310
+ break bring_in_account_v3_i18n_messages;
311
+ }
312
+ if (buildContext.implementedThemeTypes.account.type !== "Single-Page") {
313
+ break bring_in_account_v3_i18n_messages;
314
+ }
315
+
316
+ const { extractedDirPath } = await downloadAndExtractArchive({
317
+ url: "https://repo1.maven.org/maven2/org/keycloak/keycloak-account-ui/25.0.1/keycloak-account-ui-25.0.1.jar",
318
+ cacheDirPath: buildContext.cacheDirPath,
319
+ fetchOptions: buildContext.fetchOptions,
320
+ uniqueIdOfOnArchiveFile: "bring_in_account_v3_i18n_messages",
321
+ onArchiveFile: async ({ fileRelativePath, writeFile }) => {
322
+ if (
323
+ !fileRelativePath.startsWith(
324
+ pathJoin("theme", "keycloak.v3", "account", "messages")
325
+ )
326
+ ) {
327
+ return;
328
+ }
329
+ await writeFile({
330
+ fileRelativePath: pathBasename(fileRelativePath)
331
+ });
332
+ }
333
+ });
334
+
335
+ transformCodebase({
336
+ srcDirPath: extractedDirPath,
337
+ destDirPath: pathJoin(
338
+ getThemeTypeDirPath({ themeType: "account" }),
339
+ "messages"
340
+ )
341
+ });
342
+ }
343
+
278
344
  {
279
345
  const metaInfKeycloakThemes: MetaInfKeycloakTheme = { themes: [] };
280
346
 
281
347
  metaInfKeycloakThemes.themes.push({
282
348
  name: themeName,
283
- types: objectEntries(buildContext.recordIsImplementedByThemeType)
284
- .filter(([, isImplemented]) => isImplemented)
349
+ types: objectEntries(buildContext.implementedThemeTypes)
350
+ .filter(([, { isImplemented }]) => isImplemented)
285
351
  .map(([themeType]) => themeType)
286
352
  });
287
353
 
288
- if (buildContext.recordIsImplementedByThemeType.account) {
354
+ if (buildContext.implementedThemeTypes.account.isImplemented) {
289
355
  metaInfKeycloakThemes.themes.push({
290
- name: accountV1ThemeName,
356
+ name: ACCOUNT_V1_THEME_NAME,
291
357
  types: ["account"]
292
358
  });
293
359
  }
@@ -31,8 +31,8 @@ export function generateResourcesForThemeVariant(params: {
31
31
  Buffer.from(sourceCode)
32
32
  .toString("utf-8")
33
33
  .replace(
34
- `kcContext.themeName = "${themeName}";`,
35
- `kcContext.themeName = "${themeVariantName}";`
34
+ `"themeName": "${themeName}"`,
35
+ `"themeName": "${themeVariantName}"`
36
36
  ),
37
37
  "utf8"
38
38
  );
@@ -5,8 +5,8 @@ import * as fs from "fs";
5
5
  import { join as pathJoin } from "path";
6
6
  import {
7
7
  type ThemeType,
8
- accountThemePageIds,
9
- loginThemePageIds
8
+ ACCOUNT_THEME_PAGE_IDS,
9
+ LOGIN_THEME_PAGE_IDS
10
10
  } from "../../shared/constants";
11
11
 
12
12
  export function readExtraPagesNames(params: {
@@ -34,19 +34,16 @@ export function readExtraPagesNames(params: {
34
34
  const rawSourceFile = fs.readFileSync(candidateFilPath).toString("utf8");
35
35
 
36
36
  extraPages.push(
37
- ...Array.from(
38
- rawSourceFile.matchAll(/["']([^.\s]+.ftl)["']:/g),
39
- m => (console.log(m), m[1])
40
- )
37
+ ...Array.from(rawSourceFile.matchAll(/["']([^.\s]+.ftl)["']:/g), m => m[1])
41
38
  );
42
39
  }
43
40
 
44
41
  return extraPages.reduce(...removeDuplicates<string>()).filter(pageId => {
45
42
  switch (themeType) {
46
43
  case "account":
47
- return !id<readonly string[]>(accountThemePageIds).includes(pageId);
44
+ return !id<readonly string[]>(ACCOUNT_THEME_PAGE_IDS).includes(pageId);
48
45
  case "login":
49
- return !id<readonly string[]>(loginThemePageIds).includes(pageId);
46
+ return !id<readonly string[]>(LOGIN_THEME_PAGE_IDS).includes(pageId);
50
47
  }
51
48
  });
52
49
  }
@@ -3,7 +3,7 @@ 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
5
  import { getBuildContext } from "../shared/buildContext";
6
- import { vitePluginSubScriptEnvNames } from "../shared/constants";
6
+ import { VITE_PLUGIN_SUB_SCRIPTS_ENV_NAMES } from "../shared/constants";
7
7
  import { buildJars } from "./buildJars";
8
8
  import type { CliCommandOptions } from "../main";
9
9
  import chalk from "chalk";
@@ -85,7 +85,7 @@ export async function command(params: { cliCommandOptions: CliCommandOptions })
85
85
  });
86
86
 
87
87
  run_post_build_script: {
88
- if (buildContext.bundler.type !== "vite") {
88
+ if (buildContext.bundler !== "vite") {
89
89
  break run_post_build_script;
90
90
  }
91
91
 
@@ -93,10 +93,12 @@ export async function command(params: { cliCommandOptions: CliCommandOptions })
93
93
  cwd: buildContext.projectDirPath,
94
94
  env: {
95
95
  ...process.env,
96
- [vitePluginSubScriptEnvNames.runPostBuildScript]: JSON.stringify({
97
- resourcesDirPath,
98
- buildContext
99
- })
96
+ [VITE_PLUGIN_SUB_SCRIPTS_ENV_NAMES.RUN_POST_BUILD_SCRIPT]: JSON.stringify(
97
+ {
98
+ resourcesDirPath,
99
+ buildContext
100
+ }
101
+ )
100
102
  }
101
103
  });
102
104
  }
@@ -1,5 +1,5 @@
1
1
  import type { BuildContext } from "../../shared/buildContext";
2
- import { basenameOfTheKeycloakifyResourcesDir } from "../../shared/constants";
2
+ import { BASENAME_OF_KEYCLOAKIFY_RESOURCES_DIR } from "../../shared/constants";
3
3
  import { assert } from "tsafe/assert";
4
4
  import { posix } from "path";
5
5
 
@@ -18,35 +18,49 @@ export function replaceImportsInCssCode(params: {
18
18
  } {
19
19
  const { cssCode, cssFileRelativeDirPath, buildContext } = params;
20
20
 
21
- const fixedCssCode = cssCode.replace(
22
- /url\(["']?(\/[^/][^)"']+)["']?\)/g,
23
- (match, assetFileAbsoluteUrlPathname) => {
24
- if (buildContext.urlPathname !== undefined) {
25
- if (!assetFileAbsoluteUrlPathname.startsWith(buildContext.urlPathname)) {
26
- // NOTE: Should never happen
27
- return match;
28
- }
29
- assetFileAbsoluteUrlPathname = assetFileAbsoluteUrlPathname.replace(
30
- buildContext.urlPathname,
31
- "/"
32
- );
33
- }
34
-
35
- inline_style_in_html: {
36
- if (cssFileRelativeDirPath !== undefined) {
37
- break inline_style_in_html;
38
- }
21
+ let fixedCssCode = cssCode;
22
+
23
+ [
24
+ /url\("(\/[^/][^"]+)"\)/g,
25
+ /url\('(\/[^/][^']+)'\)/g,
26
+ /url\((\/[^/][^)]+)\)/g
27
+ ].forEach(
28
+ regex =>
29
+ (fixedCssCode = fixedCssCode.replace(
30
+ regex,
31
+ (match, assetFileAbsoluteUrlPathname) => {
32
+ if (buildContext.urlPathname !== undefined) {
33
+ if (
34
+ !assetFileAbsoluteUrlPathname.startsWith(
35
+ buildContext.urlPathname
36
+ )
37
+ ) {
38
+ // NOTE: Should never happen
39
+ return match;
40
+ }
41
+ assetFileAbsoluteUrlPathname =
42
+ assetFileAbsoluteUrlPathname.replace(
43
+ buildContext.urlPathname,
44
+ "/"
45
+ );
46
+ }
39
47
 
40
- return `url(\${url.resourcesPath}/${basenameOfTheKeycloakifyResourcesDir}${assetFileAbsoluteUrlPathname})`;
41
- }
48
+ inline_style_in_html: {
49
+ if (cssFileRelativeDirPath !== undefined) {
50
+ break inline_style_in_html;
51
+ }
42
52
 
43
- const assetFileRelativeUrlPathname = posix.relative(
44
- cssFileRelativeDirPath.replace(/\\/g, "/"),
45
- assetFileAbsoluteUrlPathname.replace(/^\//, "")
46
- );
53
+ return `url("\${xKeycloakify.resourcesPath}/${BASENAME_OF_KEYCLOAKIFY_RESOURCES_DIR}${assetFileAbsoluteUrlPathname}")`;
54
+ }
47
55
 
48
- return `url(${assetFileRelativeUrlPathname})`;
49
- }
56
+ const assetFileRelativeUrlPathname = posix.relative(
57
+ cssFileRelativeDirPath.replace(/\\/g, "/"),
58
+ assetFileAbsoluteUrlPathname.replace(/^\//, "")
59
+ );
60
+
61
+ return `url("${assetFileRelativeUrlPathname}")`;
62
+ }
63
+ ))
50
64
  );
51
65
 
52
66
  return { fixedCssCode };
@@ -8,7 +8,7 @@ export type BuildContextLike = {
8
8
  projectBuildDirPath: string;
9
9
  assetsDirPath: string;
10
10
  urlPathname: string | undefined;
11
- bundler: { type: "vite" } | { type: "webpack" };
11
+ bundler: "vite" | "webpack";
12
12
  };
13
13
 
14
14
  assert<BuildContext extends BuildContextLike ? true : false>();
@@ -20,7 +20,7 @@ export function replaceImportsInJsCode(params: {
20
20
  const { jsCode, buildContext } = params;
21
21
 
22
22
  const { fixedJsCode } = (() => {
23
- switch (buildContext.bundler.type) {
23
+ switch (buildContext.bundler) {
24
24
  case "vite":
25
25
  return replaceImportsInJsCode_vite({
26
26
  jsCode,
@@ -1,4 +1,4 @@
1
- import { basenameOfTheKeycloakifyResourcesDir } from "../../../shared/constants";
1
+ import { BASENAME_OF_KEYCLOAKIFY_RESOURCES_DIR } from "../../../shared/constants";
2
2
  import { assert } from "tsafe/assert";
3
3
  import type { BuildContext } from "../../../shared/buildContext";
4
4
  import * as nodePath from "path";
@@ -31,13 +31,13 @@ export function replaceImportsInJsCode_vite(params: {
31
31
 
32
32
  let fixedJsCode = jsCode;
33
33
 
34
- replace_base_javacript_import: {
34
+ replace_base_js_import: {
35
35
  if (buildContext.urlPathname === undefined) {
36
- break replace_base_javacript_import;
36
+ break replace_base_js_import;
37
37
  }
38
38
  // Optimization
39
39
  if (!jsCode.includes(buildContext.urlPathname)) {
40
- break replace_base_javacript_import;
40
+ break replace_base_js_import;
41
41
  }
42
42
 
43
43
  // Replace `Hv=function(e){return"/abcde12345/"+e}` by `Hv=function(e){return"/"+e}`
@@ -85,13 +85,13 @@ export function replaceImportsInJsCode_vite(params: {
85
85
  fixedJsCode = replaceAll(
86
86
  fixedJsCode,
87
87
  `"${relativePathOfAssetFile}"`,
88
- `(window.kcContext.url.resourcesPath.substring(1) + "/${basenameOfTheKeycloakifyResourcesDir}/${relativePathOfAssetFile}")`
88
+ `(window.kcContext["x-keycloakify"].resourcesPath.substring(1) + "/${BASENAME_OF_KEYCLOAKIFY_RESOURCES_DIR}/${relativePathOfAssetFile}")`
89
89
  );
90
90
 
91
91
  fixedJsCode = replaceAll(
92
92
  fixedJsCode,
93
93
  `"${buildContext.urlPathname ?? "/"}${relativePathOfAssetFile}"`,
94
- `(window.kcContext.url.resourcesPath + "/${basenameOfTheKeycloakifyResourcesDir}/${relativePathOfAssetFile}")`
94
+ `(window.kcContext["x-keycloakify"].resourcesPath + "/${BASENAME_OF_KEYCLOAKIFY_RESOURCES_DIR}/${relativePathOfAssetFile}")`
95
95
  );
96
96
  });
97
97
  }
@@ -1,4 +1,4 @@
1
- import { basenameOfTheKeycloakifyResourcesDir } from "../../../shared/constants";
1
+ import { BASENAME_OF_KEYCLOAKIFY_RESOURCES_DIR } from "../../../shared/constants";
2
2
  import { assert } from "tsafe/assert";
3
3
  import type { BuildContext } from "../../../shared/buildContext";
4
4
  import * as nodePath from "path";
@@ -83,14 +83,14 @@ export function replaceImportsInJsCode_webpack(params: {
83
83
  var pd = Object.getOwnPropertyDescriptor(${n}, "p");
84
84
  if( pd === undefined || pd.configurable ){
85
85
  Object.defineProperty(${n}, "p", {
86
- get: function() { return window.kcContext.url.resourcesPath; },
86
+ get: function() { return window.kcContext["x-keycloakify"].resourcesPath; },
87
87
  set: function() {}
88
88
  });
89
89
  }
90
90
  return "${u}";
91
91
  })()] = ${
92
92
  isArrowFunction ? `${e} =>` : `function(${e}) { return `
93
- } "/${basenameOfTheKeycloakifyResourcesDir}/${staticDir}${language}/"`
93
+ } "/${BASENAME_OF_KEYCLOAKIFY_RESOURCES_DIR}/${staticDir}${language}/"`
94
94
  .replace(/\s+/g, " ")
95
95
  .trim();
96
96
  }
@@ -104,7 +104,7 @@ export function replaceImportsInJsCode_webpack(params: {
104
104
  `[a-zA-Z]+\\.[a-zA-Z]+\\+"${staticDir.replace(/\//g, "\\/")}`,
105
105
  "g"
106
106
  ),
107
- `window.kcContext.url.resourcesPath + "/${basenameOfTheKeycloakifyResourcesDir}/${staticDir}`
107
+ `window.kcContext["x-keycloakify"].resourcesPath + "/${BASENAME_OF_KEYCLOAKIFY_RESOURCES_DIR}/${staticDir}`
108
108
  );
109
109
 
110
110
  return { fixedJsCode };