keycloakify 10.0.0-rc.1 → 10.0.0-rc.12

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 (431) hide show
  1. package/PUBLIC_URL.js +1 -1
  2. package/PUBLIC_URL.js.map +1 -1
  3. package/account/Fallback.js +3 -0
  4. package/account/Fallback.js.map +1 -1
  5. package/account/Template.js +2 -2
  6. package/account/Template.js.map +1 -1
  7. package/account/i18n/baseMessages/index.js.map +1 -1
  8. package/account/i18n/i18n.d.ts +3 -4
  9. package/account/i18n/i18n.js +3 -4
  10. package/account/i18n/i18n.js.map +1 -1
  11. package/account/index.d.ts +1 -1
  12. package/account/kcContext/KcContext.d.ts +62 -59
  13. package/account/kcContext/KcContext.js.map +1 -1
  14. package/account/kcContext/createGetKcContext.d.ts +3 -3
  15. package/account/kcContext/createGetKcContext.js.map +1 -1
  16. package/account/kcContext/getKcContextFromWindow.js +1 -1
  17. package/account/kcContext/getKcContextFromWindow.js.map +1 -1
  18. package/account/kcContext/kcContextMocks.js +22 -14
  19. package/account/kcContext/kcContextMocks.js.map +1 -1
  20. package/account/pages/Account.js +1 -1
  21. package/account/pages/Account.js.map +1 -1
  22. package/account/pages/Applications.js +3 -3
  23. package/account/pages/Applications.js.map +1 -1
  24. package/account/pages/FederatedIdentity.d.ts +7 -0
  25. package/account/pages/FederatedIdentity.js +8 -0
  26. package/account/pages/FederatedIdentity.js.map +1 -0
  27. package/account/pages/Log.js +2 -2
  28. package/account/pages/Log.js.map +1 -1
  29. package/account/pages/Password.js +4 -6
  30. package/account/pages/Password.js.map +1 -1
  31. package/account/pages/Sessions.js +1 -5
  32. package/account/pages/Sessions.js.map +1 -1
  33. package/account/pages/Totp.js +2 -2
  34. package/account/pages/Totp.js.map +1 -1
  35. package/bin/246.index.js +466 -0
  36. package/bin/420.index.js +508 -0
  37. package/bin/509.index.js +438 -0
  38. package/bin/772.index.js +1524 -0
  39. package/bin/copy-keycloak-resources-to-public.d.ts +3 -13
  40. package/bin/copy-keycloak-resources-to-public.js +22 -166
  41. package/bin/copy-keycloak-resources-to-public.js.map +1 -1
  42. package/bin/download-builtin-keycloak-theme.d.ts +3 -9
  43. package/bin/download-builtin-keycloak-theme.js +16 -292
  44. package/bin/download-builtin-keycloak-theme.js.map +1 -1
  45. package/bin/eject-keycloak-page.d.ts +4 -1
  46. package/bin/eject-keycloak-page.js +125 -56
  47. package/bin/eject-keycloak-page.js.map +1 -1
  48. package/bin/initialize-email-theme.d.ts +4 -2
  49. package/bin/initialize-email-theme.js +23 -23
  50. package/bin/initialize-email-theme.js.map +1 -1
  51. package/bin/keycloakify/buildJars/buildJar.d.ts +1 -0
  52. package/bin/keycloakify/buildJars/buildJar.js +14 -25
  53. package/bin/keycloakify/buildJars/buildJar.js.map +1 -1
  54. package/bin/keycloakify/buildJars/buildJars.d.ts +1 -4
  55. package/bin/keycloakify/buildJars/buildJars.js +17 -8
  56. package/bin/keycloakify/buildJars/buildJars.js.map +1 -1
  57. package/bin/keycloakify/buildJars/getKeycloakVersionRangeForJar.d.ts +2 -1
  58. package/bin/keycloakify/buildJars/getKeycloakVersionRangeForJar.js +39 -17
  59. package/bin/keycloakify/buildJars/getKeycloakVersionRangeForJar.js.map +1 -1
  60. package/bin/keycloakify/generateFtl/generateFtl.d.ts +1 -1
  61. package/bin/keycloakify/generateFtl/generateFtl.js +4 -3
  62. package/bin/keycloakify/generateFtl/generateFtl.js.map +1 -1
  63. package/bin/keycloakify/generateFtl/index.d.ts +0 -1
  64. package/bin/keycloakify/generateFtl/index.js +0 -1
  65. package/bin/keycloakify/generateFtl/index.js.map +1 -1
  66. package/bin/keycloakify/{generateTheme → generateSrcMainResources}/bringInAccountV1.d.ts +1 -1
  67. package/bin/keycloakify/{generateTheme → generateSrcMainResources}/bringInAccountV1.js +7 -7
  68. package/bin/keycloakify/generateSrcMainResources/bringInAccountV1.js.map +1 -0
  69. package/bin/keycloakify/{generateTheme → generateSrcMainResources}/generateMessageProperties.d.ts +1 -1
  70. package/bin/keycloakify/generateSrcMainResources/generateMessageProperties.js.map +1 -0
  71. package/bin/keycloakify/generateSrcMainResources/generateSrcMainResources.d.ts +7 -0
  72. package/bin/keycloakify/{generateTheme/generateTheme.js → generateSrcMainResources/generateSrcMainResources.js} +13 -19
  73. package/bin/keycloakify/generateSrcMainResources/generateSrcMainResources.js.map +1 -0
  74. package/bin/keycloakify/{generateTheme/generateSrcMainResources.d.ts → generateSrcMainResources/generateSrcMainResourcesForMainTheme.d.ts} +4 -8
  75. package/bin/keycloakify/{generateTheme/generateSrcMainResources.js → generateSrcMainResources/generateSrcMainResourcesForMainTheme.js} +53 -52
  76. package/bin/keycloakify/generateSrcMainResources/generateSrcMainResourcesForMainTheme.js.map +1 -0
  77. package/bin/keycloakify/generateSrcMainResources/generateSrcMainResourcesForThemeVariant.d.ts +8 -0
  78. package/bin/keycloakify/generateSrcMainResources/generateSrcMainResourcesForThemeVariant.js +47 -0
  79. package/bin/keycloakify/generateSrcMainResources/generateSrcMainResourcesForThemeVariant.js.map +1 -0
  80. package/bin/keycloakify/generateSrcMainResources/index.d.ts +1 -0
  81. package/bin/keycloakify/{generateTheme → generateSrcMainResources}/index.js +1 -1
  82. package/bin/keycloakify/generateSrcMainResources/index.js.map +1 -0
  83. package/bin/keycloakify/{generateTheme → generateSrcMainResources}/readExtraPageNames.d.ts +1 -1
  84. package/bin/keycloakify/{generateTheme → generateSrcMainResources}/readExtraPageNames.js +3 -3
  85. package/bin/keycloakify/generateSrcMainResources/readExtraPageNames.js.map +1 -0
  86. package/bin/keycloakify/{generateTheme → generateSrcMainResources}/readFieldNameUsage.d.ts +1 -2
  87. package/bin/keycloakify/{generateTheme → generateSrcMainResources}/readFieldNameUsage.js +3 -2
  88. package/bin/keycloakify/generateSrcMainResources/readFieldNameUsage.js.map +1 -0
  89. package/bin/keycloakify/generateStartKeycloakTestingContainer.d.ts +2 -0
  90. package/bin/keycloakify/generateStartKeycloakTestingContainer.js +9 -12
  91. package/bin/keycloakify/generateStartKeycloakTestingContainer.js.map +1 -1
  92. package/bin/keycloakify/index.d.ts +0 -1
  93. package/bin/keycloakify/index.js +0 -5
  94. package/bin/keycloakify/index.js.map +1 -1
  95. package/bin/keycloakify/keycloakify.d.ts +4 -1
  96. package/bin/keycloakify/keycloakify.js +49 -63
  97. package/bin/keycloakify/keycloakify.js.map +1 -1
  98. package/bin/keycloakify/replacers/replaceImportsInCssCode.js +1 -1
  99. package/bin/keycloakify/replacers/replaceImportsInCssCode.js.map +1 -1
  100. package/bin/keycloakify/replacers/replaceImportsInInlineCssCode.js +1 -1
  101. package/bin/keycloakify/replacers/replaceImportsInInlineCssCode.js.map +1 -1
  102. package/bin/keycloakify/replacers/replaceImportsInJsCode/replaceImportsInJsCode.js.map +1 -1
  103. package/bin/keycloakify/replacers/replaceImportsInJsCode/vite.js +1 -1
  104. package/bin/keycloakify/replacers/replaceImportsInJsCode/vite.js.map +1 -1
  105. package/bin/keycloakify/replacers/replaceImportsInJsCode/webpack.js +1 -1
  106. package/bin/keycloakify/replacers/replaceImportsInJsCode/webpack.js.map +1 -1
  107. package/bin/main.d.ts +4 -0
  108. package/bin/main.js +145466 -0
  109. package/bin/main.js.map +1 -0
  110. package/bin/main.original.js +287 -0
  111. package/bin/shared/KeycloakVersionRange.d.ts +5 -0
  112. package/bin/shared/KeycloakVersionRange.js +3 -0
  113. package/bin/shared/KeycloakVersionRange.js.map +1 -0
  114. package/bin/{keycloakify/buildOptions → shared}/buildOptions.d.ts +17 -2
  115. package/bin/{keycloakify/buildOptions → shared}/buildOptions.js +71 -35
  116. package/bin/shared/buildOptions.js.map +1 -0
  117. package/bin/{keycloakify/generateFtl/pageId.d.ts → shared/constants.d.ts} +13 -1
  118. package/bin/{keycloakify/generateFtl/pageId.js → shared/constants.js} +22 -3
  119. package/bin/shared/constants.js.map +1 -0
  120. package/bin/shared/copyKeycloakResourcesToPublic.d.ts +8 -0
  121. package/bin/shared/copyKeycloakResourcesToPublic.js +177 -0
  122. package/bin/shared/copyKeycloakResourcesToPublic.js.map +1 -0
  123. package/bin/{downloadAndUnzip.js → shared/downloadAndUnzip.js} +11 -11
  124. package/bin/shared/downloadAndUnzip.js.map +1 -0
  125. package/bin/shared/downloadBuiltinKeycloakTheme.d.ts +9 -0
  126. package/bin/shared/downloadBuiltinKeycloakTheme.js +316 -0
  127. package/bin/shared/downloadBuiltinKeycloakTheme.js.map +1 -0
  128. package/bin/{keycloakify/generateTheme → shared}/downloadKeycloakStaticResources.d.ts +1 -1
  129. package/bin/{keycloakify/generateTheme → shared}/downloadKeycloakStaticResources.js +7 -7
  130. package/bin/shared/downloadKeycloakStaticResources.js.map +1 -0
  131. package/bin/shared/getJarFileBasename.d.ts +6 -0
  132. package/bin/shared/getJarFileBasename.js +10 -0
  133. package/bin/shared/getJarFileBasename.js.map +1 -0
  134. package/bin/{getThemeSrcDirPath.js → shared/getThemeSrcDirPath.js} +1 -1
  135. package/bin/shared/getThemeSrcDirPath.js.map +1 -0
  136. package/bin/shared/metaInfKeycloakThemes.d.ts +17 -0
  137. package/bin/shared/metaInfKeycloakThemes.js +51 -0
  138. package/bin/shared/metaInfKeycloakThemes.js.map +1 -0
  139. package/bin/shared/promptKeycloakVersion.d.ts +6 -0
  140. package/bin/shared/promptKeycloakVersion.js +159 -0
  141. package/bin/shared/promptKeycloakVersion.js.map +1 -0
  142. package/bin/start-keycloak.d.ts +8 -0
  143. package/bin/start-keycloak.js +287 -0
  144. package/bin/start-keycloak.js.map +1 -0
  145. package/bin/tools/SemVer.js +1 -1
  146. package/bin/tools/SemVer.js.map +1 -1
  147. package/bin/tools/String.prototype.replaceAll.js.map +1 -1
  148. package/bin/tools/crawl.js.map +1 -1
  149. package/bin/tools/crc32.js.map +1 -1
  150. package/bin/tools/deflate.js +10 -1
  151. package/bin/tools/deflate.js.map +1 -1
  152. package/bin/tools/fetchProxyOptions.js +9 -9
  153. package/bin/tools/fetchProxyOptions.js.map +1 -1
  154. package/bin/tools/fs.rm.js.map +1 -1
  155. package/bin/tools/fs.rmSync.js +4 -4
  156. package/bin/tools/fs.rmSync.js.map +1 -1
  157. package/bin/tools/getAbsoluteAndInOsFormatPath.js +28 -0
  158. package/bin/tools/getAbsoluteAndInOsFormatPath.js.map +1 -1
  159. package/bin/{keycloakify/buildOptions → tools}/getNpmWorkspaceRootDirPath.js +1 -13
  160. package/bin/tools/getNpmWorkspaceRootDirPath.js.map +1 -0
  161. package/bin/tools/getThisCodebaseRootDirPath.js.map +1 -1
  162. package/bin/tools/octokit-addons/getLatestsSemVersionedTag.js +21 -24
  163. package/bin/tools/octokit-addons/getLatestsSemVersionedTag.js.map +1 -1
  164. package/bin/tools/octokit-addons/listTags.js +3 -2
  165. package/bin/tools/octokit-addons/listTags.js.map +1 -1
  166. package/bin/tools/readThisNpmPackageVersion.d.ts +1 -0
  167. package/bin/tools/{readThisNpmProjectVersion.js → readThisNpmPackageVersion.js} +4 -4
  168. package/bin/tools/{readThisNpmProjectVersion.js.map → readThisNpmPackageVersion.js.map} +1 -1
  169. package/bin/tools/transformCodebase.js.map +1 -1
  170. package/bin/tools/trimIndent.js.map +1 -1
  171. package/bin/tools/unzip.js.map +1 -1
  172. package/bin/tsconfig.tsbuildinfo +1 -0
  173. package/lib/BASE_URL.js.map +1 -1
  174. package/login/Fallback.js.map +1 -1
  175. package/login/Template.js +4 -4
  176. package/login/Template.js.map +1 -1
  177. package/login/UserProfileFormFields.js +17 -19
  178. package/login/UserProfileFormFields.js.map +1 -1
  179. package/login/i18n/baseMessages/index.js.map +1 -1
  180. package/login/i18n/i18n.d.ts +3 -4
  181. package/login/i18n/i18n.js +3 -4
  182. package/login/i18n/i18n.js.map +1 -1
  183. package/login/index.d.ts +1 -1
  184. package/login/kcContext/KcContext.d.ts +1 -0
  185. package/login/kcContext/KcContext.js.map +1 -1
  186. package/login/kcContext/createGetKcContext.d.ts +3 -3
  187. package/login/kcContext/createGetKcContext.js.map +1 -1
  188. package/login/kcContext/getKcContextFromWindow.js +1 -1
  189. package/login/kcContext/getKcContextFromWindow.js.map +1 -1
  190. package/login/kcContext/kcContextMocks.js +3 -2
  191. package/login/kcContext/kcContextMocks.js.map +1 -1
  192. package/login/lib/useDownloadTerms.js.map +1 -1
  193. package/login/lib/useUserProfileForm.js +9 -9
  194. package/login/lib/useUserProfileForm.js.map +1 -1
  195. package/login/pages/Code.js +1 -1
  196. package/login/pages/Code.js.map +1 -1
  197. package/login/pages/DeleteAccountConfirm.js +1 -1
  198. package/login/pages/DeleteAccountConfirm.js.map +1 -1
  199. package/login/pages/DeleteCredential.js +1 -1
  200. package/login/pages/DeleteCredential.js.map +1 -1
  201. package/login/pages/Error.js +1 -1
  202. package/login/pages/Error.js.map +1 -1
  203. package/login/pages/FrontchannelLogout.js +1 -1
  204. package/login/pages/FrontchannelLogout.js.map +1 -1
  205. package/login/pages/IdpReviewUserProfile.js +1 -1
  206. package/login/pages/IdpReviewUserProfile.js.map +1 -1
  207. package/login/pages/Info.js +5 -5
  208. package/login/pages/Info.js.map +1 -1
  209. package/login/pages/Login.js +4 -4
  210. package/login/pages/Login.js.map +1 -1
  211. package/login/pages/LoginConfigTotp.js +2 -10
  212. package/login/pages/LoginConfigTotp.js.map +1 -1
  213. package/login/pages/LoginIdpLinkConfirm.js +1 -1
  214. package/login/pages/LoginIdpLinkConfirm.js.map +1 -1
  215. package/login/pages/LoginIdpLinkEmail.js +1 -1
  216. package/login/pages/LoginIdpLinkEmail.js.map +1 -1
  217. package/login/pages/LoginOauth2DeviceVerifyUserCode.js +1 -1
  218. package/login/pages/LoginOauth2DeviceVerifyUserCode.js.map +1 -1
  219. package/login/pages/LoginOauthGrant.js +2 -2
  220. package/login/pages/LoginOauthGrant.js.map +1 -1
  221. package/login/pages/LoginOtp.js +1 -1
  222. package/login/pages/LoginOtp.js.map +1 -1
  223. package/login/pages/LoginPageExpired.js +1 -1
  224. package/login/pages/LoginPageExpired.js.map +1 -1
  225. package/login/pages/LoginPassword.js +3 -3
  226. package/login/pages/LoginPassword.js.map +1 -1
  227. package/login/pages/LoginRecoveryAuthnCodeConfig.js +3 -3
  228. package/login/pages/LoginRecoveryAuthnCodeConfig.js.map +1 -1
  229. package/login/pages/LoginRecoveryAuthnCodeInput.js +1 -1
  230. package/login/pages/LoginRecoveryAuthnCodeInput.js.map +1 -1
  231. package/login/pages/LoginResetOtp.js +1 -1
  232. package/login/pages/LoginResetOtp.js.map +1 -1
  233. package/login/pages/LoginResetPassword.js +2 -2
  234. package/login/pages/LoginResetPassword.js.map +1 -1
  235. package/login/pages/LoginUpdatePassword.js +3 -3
  236. package/login/pages/LoginUpdatePassword.js.map +1 -1
  237. package/login/pages/LoginUpdateProfile.js +2 -4
  238. package/login/pages/LoginUpdateProfile.js.map +1 -1
  239. package/login/pages/LoginUsername.js +3 -3
  240. package/login/pages/LoginUsername.js.map +1 -1
  241. package/login/pages/LoginVerifyEmail.js +1 -1
  242. package/login/pages/LoginVerifyEmail.js.map +1 -1
  243. package/login/pages/LoginX509Info.js +1 -1
  244. package/login/pages/LoginX509Info.js.map +1 -1
  245. package/login/pages/LogoutConfirm.js +1 -1
  246. package/login/pages/LogoutConfirm.js.map +1 -1
  247. package/login/pages/Register.js +4 -8
  248. package/login/pages/Register.js.map +1 -1
  249. package/login/pages/SamlPostForm.js +1 -1
  250. package/login/pages/SamlPostForm.js.map +1 -1
  251. package/login/pages/SelectAuthenticator.js +2 -2
  252. package/login/pages/SelectAuthenticator.js.map +1 -1
  253. package/login/pages/Terms.js +1 -1
  254. package/login/pages/Terms.js.map +1 -1
  255. package/login/pages/UpdateEmail.js +3 -5
  256. package/login/pages/UpdateEmail.js.map +1 -1
  257. package/login/pages/WebauthnAuthenticate.js +6 -6
  258. package/login/pages/WebauthnAuthenticate.js.map +1 -1
  259. package/login/pages/WebauthnError.js +2 -2
  260. package/login/pages/WebauthnError.js.map +1 -1
  261. package/login/pages/WebauthnRegister.js +3 -3
  262. package/login/pages/WebauthnRegister.js.map +1 -1
  263. package/package.json +9760 -1155
  264. package/src/PUBLIC_URL.ts +1 -1
  265. package/src/account/Fallback.tsx +3 -0
  266. package/src/account/Template.tsx +2 -5
  267. package/src/account/i18n/i18n.tsx +5 -8
  268. package/src/account/index.ts +1 -1
  269. package/src/account/kcContext/KcContext.ts +72 -62
  270. package/src/account/kcContext/getKcContextFromWindow.ts +1 -1
  271. package/src/account/kcContext/kcContextMocks.ts +21 -15
  272. package/src/account/pages/Applications.tsx +2 -2
  273. package/src/account/pages/FederatedIdentity.tsx +58 -0
  274. package/src/account/pages/Log.tsx +1 -1
  275. package/src/account/pages/Sessions.tsx +0 -3
  276. package/src/account/pages/Totp.tsx +20 -21
  277. package/src/bin/copy-keycloak-resources-to-public.ts +10 -106
  278. package/src/bin/download-builtin-keycloak-theme.ts +14 -274
  279. package/src/bin/eject-keycloak-page.ts +81 -19
  280. package/src/bin/initialize-email-theme.ts +22 -21
  281. package/src/bin/keycloakify/buildJars/buildJar.ts +13 -17
  282. package/src/bin/keycloakify/buildJars/buildJars.ts +14 -15
  283. package/src/bin/keycloakify/buildJars/generatePom.ts +1 -1
  284. package/src/bin/keycloakify/buildJars/getKeycloakVersionRangeForJar.ts +45 -18
  285. package/src/bin/keycloakify/generateFtl/ftl_object_to_js_code_declaring_an_object.ftl +160 -232
  286. package/src/bin/keycloakify/generateFtl/generateFtl.ts +7 -4
  287. package/src/bin/keycloakify/generateFtl/index.ts +0 -1
  288. package/src/bin/keycloakify/{generateTheme → generateSrcMainResources}/bringInAccountV1.ts +8 -7
  289. package/src/bin/keycloakify/{generateTheme → generateSrcMainResources}/generateMessageProperties.ts +1 -1
  290. package/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResources.ts +32 -0
  291. package/src/bin/keycloakify/{generateTheme/generateSrcMainResources.ts → generateSrcMainResources/generateSrcMainResourcesForMainTheme.ts} +40 -46
  292. package/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResourcesForThemeVariant.ts +56 -0
  293. package/src/bin/keycloakify/generateSrcMainResources/index.ts +1 -0
  294. package/src/bin/keycloakify/{generateTheme → generateSrcMainResources}/readExtraPageNames.ts +1 -2
  295. package/src/bin/keycloakify/{generateTheme → generateSrcMainResources}/readFieldNameUsage.ts +5 -4
  296. package/src/bin/keycloakify/generateStartKeycloakTestingContainer.ts +14 -15
  297. package/src/bin/keycloakify/index.ts +0 -7
  298. package/src/bin/keycloakify/keycloakify.ts +50 -67
  299. package/src/bin/keycloakify/replacers/replaceImportsInCssCode.ts +2 -2
  300. package/src/bin/keycloakify/replacers/replaceImportsInInlineCssCode.ts +2 -2
  301. package/src/bin/keycloakify/replacers/replaceImportsInJsCode/replaceImportsInJsCode.ts +1 -1
  302. package/src/bin/keycloakify/replacers/replaceImportsInJsCode/vite.ts +2 -2
  303. package/src/bin/keycloakify/replacers/replaceImportsInJsCode/webpack.ts +2 -2
  304. package/src/bin/main.ts +175 -0
  305. package/src/bin/shared/KeycloakVersionRange.ts +7 -0
  306. package/src/bin/{keycloakify/buildOptions → shared}/buildOptions.ts +113 -25
  307. package/src/bin/{keycloakify/generateFtl/pageId.ts → shared/constants.ts} +25 -1
  308. package/src/bin/shared/copyKeycloakResourcesToPublic.ts +90 -0
  309. package/src/bin/{downloadAndUnzip.ts → shared/downloadAndUnzip.ts} +6 -6
  310. package/src/bin/shared/downloadBuiltinKeycloakTheme.ts +264 -0
  311. package/src/bin/{keycloakify/generateTheme → shared}/downloadKeycloakStaticResources.ts +8 -8
  312. package/src/bin/shared/getJarFileBasename.ts +9 -0
  313. package/src/bin/{getThemeSrcDirPath.ts → shared/getThemeSrcDirPath.ts} +1 -1
  314. package/src/bin/shared/metaInfKeycloakThemes.ts +34 -0
  315. package/src/bin/shared/promptKeycloakVersion.ts +106 -0
  316. package/src/bin/start-keycloak.ts +236 -0
  317. package/src/bin/tools/fs.rmSync.ts +4 -4
  318. package/src/bin/tools/getAbsoluteAndInOsFormatPath.ts +8 -1
  319. package/src/bin/{keycloakify/buildOptions → tools}/getNpmWorkspaceRootDirPath.ts +1 -23
  320. package/src/bin/tools/{readThisNpmProjectVersion.ts → readThisNpmPackageVersion.ts} +1 -1
  321. package/src/login/Template.tsx +6 -22
  322. package/src/login/UserProfileFormFields.tsx +2 -5
  323. package/src/login/i18n/i18n.tsx +5 -8
  324. package/src/login/index.ts +1 -1
  325. package/src/login/kcContext/KcContext.ts +2 -2
  326. package/src/login/kcContext/getKcContextFromWindow.ts +1 -1
  327. package/src/login/kcContext/kcContextMocks.ts +3 -3
  328. package/src/login/lib/useUserProfileForm.tsx +10 -10
  329. package/src/login/pages/Code.tsx +1 -1
  330. package/src/login/pages/IdpReviewUserProfile.tsx +1 -1
  331. package/src/login/pages/Login.tsx +1 -1
  332. package/src/login/pages/LoginConfigTotp.tsx +1 -9
  333. package/src/login/pages/LoginUpdateProfile.tsx +1 -1
  334. package/src/login/pages/LoginUsername.tsx +1 -1
  335. package/src/login/pages/Register.tsx +1 -1
  336. package/src/login/pages/UpdateEmail.tsx +1 -1
  337. package/src/login/pages/WebauthnRegister.tsx +1 -1
  338. package/src/vite-plugin/tsconfig.json +2 -1
  339. package/src/vite-plugin/vite-plugin.ts +29 -41
  340. package/tools/Array.prototype.every.js.map +1 -1
  341. package/tools/HTMLElement.prototype.prepend.js.map +1 -1
  342. package/tools/clsx.js.map +1 -1
  343. package/tools/deepAssign.js.map +1 -1
  344. package/tools/deepClone.js.map +1 -1
  345. package/tools/formatNumber.js.map +1 -1
  346. package/tools/memoize.js.map +1 -1
  347. package/tools/useInsertLinkTags.js.map +1 -1
  348. package/tools/useInsertScriptTags.js.map +1 -1
  349. package/tools/useSetClassName.js.map +1 -1
  350. package/tsconfig.tsbuildinfo +1 -0
  351. package/vite-plugin/index.js +50851 -3
  352. package/{bin/keycloakify/buildOptions/index.js → vite-plugin/index.original.js} +1 -2
  353. package/vite-plugin/tsconfig.tsbuildinfo +1 -1
  354. package/vite-plugin/vite-plugin.d.ts +1 -2
  355. package/vite-plugin/vite-plugin.js +30 -52
  356. package/bin/constants.d.ts +0 -10
  357. package/bin/constants.js +0 -13
  358. package/bin/constants.js.map +0 -1
  359. package/bin/downloadAndUnzip.js.map +0 -1
  360. package/bin/getThemeSrcDirPath.js.map +0 -1
  361. package/bin/keycloakify/buildOptions/UserProvidedBuildOptions.d.ts +0 -35
  362. package/bin/keycloakify/buildOptions/UserProvidedBuildOptions.js +0 -14
  363. package/bin/keycloakify/buildOptions/UserProvidedBuildOptions.js.map +0 -1
  364. package/bin/keycloakify/buildOptions/buildOptions.js.map +0 -1
  365. package/bin/keycloakify/buildOptions/getCacheDirPath.d.ts +0 -5
  366. package/bin/keycloakify/buildOptions/getCacheDirPath.js +0 -22
  367. package/bin/keycloakify/buildOptions/getCacheDirPath.js.map +0 -1
  368. package/bin/keycloakify/buildOptions/getNpmWorkspaceRootDirPath.js.map +0 -1
  369. package/bin/keycloakify/buildOptions/getReactAppRootDirPath.d.ts +0 -5
  370. package/bin/keycloakify/buildOptions/getReactAppRootDirPath.js +0 -26
  371. package/bin/keycloakify/buildOptions/getReactAppRootDirPath.js.map +0 -1
  372. package/bin/keycloakify/buildOptions/index.d.ts +0 -1
  373. package/bin/keycloakify/buildOptions/index.js.map +0 -1
  374. package/bin/keycloakify/buildOptions/parsedPackageJson.d.ts +0 -10
  375. package/bin/keycloakify/buildOptions/parsedPackageJson.js +0 -49
  376. package/bin/keycloakify/buildOptions/parsedPackageJson.js.map +0 -1
  377. package/bin/keycloakify/buildOptions/resolvedViteConfig.d.ts +0 -13
  378. package/bin/keycloakify/buildOptions/resolvedViteConfig.js +0 -77
  379. package/bin/keycloakify/buildOptions/resolvedViteConfig.js.map +0 -1
  380. package/bin/keycloakify/generateFtl/ftl_object_to_js_code_declaring_an_object.ftl +0 -593
  381. package/bin/keycloakify/generateFtl/pageId.js.map +0 -1
  382. package/bin/keycloakify/generateTheme/bringInAccountV1.js.map +0 -1
  383. package/bin/keycloakify/generateTheme/downloadKeycloakStaticResources.js.map +0 -1
  384. package/bin/keycloakify/generateTheme/generateMessageProperties.js.map +0 -1
  385. package/bin/keycloakify/generateTheme/generateSrcMainResources.js.map +0 -1
  386. package/bin/keycloakify/generateTheme/generateTheme.d.ts +0 -13
  387. package/bin/keycloakify/generateTheme/generateTheme.js.map +0 -1
  388. package/bin/keycloakify/generateTheme/generateThemeVariants.d.ts +0 -5
  389. package/bin/keycloakify/generateTheme/generateThemeVariants.js +0 -67
  390. package/bin/keycloakify/generateTheme/generateThemeVariants.js.map +0 -1
  391. package/bin/keycloakify/generateTheme/index.d.ts +0 -1
  392. package/bin/keycloakify/generateTheme/index.js.map +0 -1
  393. package/bin/keycloakify/generateTheme/readExtraPageNames.js.map +0 -1
  394. package/bin/keycloakify/generateTheme/readFieldNameUsage.js.map +0 -1
  395. package/bin/promptKeycloakVersion.d.ts +0 -3
  396. package/bin/promptKeycloakVersion.js +0 -121
  397. package/bin/promptKeycloakVersion.js.map +0 -1
  398. package/bin/tools/grant-exec-perms.d.ts +0 -1
  399. package/bin/tools/grant-exec-perms.js +0 -100
  400. package/bin/tools/grant-exec-perms.js.map +0 -1
  401. package/bin/tools/logger.d.ts +0 -12
  402. package/bin/tools/logger.js +0 -23
  403. package/bin/tools/logger.js.map +0 -1
  404. package/bin/tools/readThisNpmProjectVersion.d.ts +0 -1
  405. package/index.d.ts +0 -1
  406. package/index.js +0 -2
  407. package/index.js.map +0 -1
  408. package/lib/keycloakJsAdapter.d.ts +0 -51
  409. package/lib/keycloakJsAdapter.js +0 -74
  410. package/lib/keycloakJsAdapter.js.map +0 -1
  411. package/src/bin/constants.ts +0 -13
  412. package/src/bin/keycloakify/buildOptions/UserProvidedBuildOptions.ts +0 -21
  413. package/src/bin/keycloakify/buildOptions/getCacheDirPath.ts +0 -25
  414. package/src/bin/keycloakify/buildOptions/getReactAppRootDirPath.ts +0 -23
  415. package/src/bin/keycloakify/buildOptions/index.ts +0 -1
  416. package/src/bin/keycloakify/buildOptions/parsedPackageJson.ts +0 -32
  417. package/src/bin/keycloakify/buildOptions/resolvedViteConfig.ts +0 -74
  418. package/src/bin/keycloakify/generateTheme/generateTheme.ts +0 -44
  419. package/src/bin/keycloakify/generateTheme/generateThemeVariants.ts +0 -50
  420. package/src/bin/keycloakify/generateTheme/index.ts +0 -1
  421. package/src/bin/promptKeycloakVersion.ts +0 -49
  422. package/src/bin/tools/grant-exec-perms.ts +0 -19
  423. package/src/bin/tools/logger.ts +0 -27
  424. package/src/index.ts +0 -1
  425. package/src/lib/keycloakJsAdapter.ts +0 -118
  426. package/vite-plugin/index.js.map +0 -1
  427. package/vite-plugin/vite-plugin.js.map +0 -1
  428. /package/bin/keycloakify/{generateTheme → generateSrcMainResources}/generateMessageProperties.js +0 -0
  429. /package/bin/{downloadAndUnzip.d.ts → shared/downloadAndUnzip.d.ts} +0 -0
  430. /package/bin/{getThemeSrcDirPath.d.ts → shared/getThemeSrcDirPath.d.ts} +0 -0
  431. /package/bin/{keycloakify/buildOptions → tools}/getNpmWorkspaceRootDirPath.d.ts +0 -0
@@ -1,25 +1,31 @@
1
1
  import { transformCodebase } from "../../tools/transformCodebase";
2
2
  import * as fs from "fs";
3
- import { join as pathJoin, resolve as pathResolve, dirname as pathDirname } from "path";
3
+ import { join as pathJoin, resolve as pathResolve } from "path";
4
4
  import { replaceImportsInJsCode } from "../replacers/replaceImportsInJsCode";
5
5
  import { replaceImportsInCssCode } from "../replacers/replaceImportsInCssCode";
6
- import { generateFtlFilesCodeFactory, loginThemePageIds, accountThemePageIds } from "../generateFtl";
6
+ import { generateFtlFilesCodeFactory } from "../generateFtl";
7
7
  import {
8
8
  type ThemeType,
9
9
  lastKeycloakVersionWithAccountV1,
10
10
  keycloak_resources,
11
11
  accountV1ThemeName,
12
- basenameOfTheKeycloakifyResourcesDir
13
- } from "../../constants";
12
+ basenameOfTheKeycloakifyResourcesDir,
13
+ loginThemePageIds,
14
+ accountThemePageIds
15
+ } from "../../shared/constants";
14
16
  import { isInside } from "../../tools/isInside";
15
- import type { BuildOptions } from "../buildOptions";
17
+ import type { BuildOptions } from "../../shared/buildOptions";
16
18
  import { assert, type Equals } from "tsafe/assert";
17
- import { downloadKeycloakStaticResources } from "./downloadKeycloakStaticResources";
19
+ import { downloadKeycloakStaticResources } from "../../shared/downloadKeycloakStaticResources";
18
20
  import { readFieldNameUsage } from "./readFieldNameUsage";
19
21
  import { readExtraPagesNames } from "./readExtraPageNames";
20
22
  import { generateMessageProperties } from "./generateMessageProperties";
21
23
  import { bringInAccountV1 } from "./bringInAccountV1";
24
+ import { getThemeSrcDirPath } from "../../shared/getThemeSrcDirPath";
22
25
  import { rmSync } from "../../tools/fs.rmSync";
26
+ import { readThisNpmPackageVersion } from "../../tools/readThisNpmPackageVersion";
27
+ import { writeMetaInfKeycloakThemes, type MetaInfKeycloakTheme } from "../../shared/metaInfKeycloakThemes";
28
+ import { objectEntries } from "tsafe/objectEntries";
23
29
 
24
30
  export type BuildOptionsLike = {
25
31
  bundler: "vite" | "webpack";
@@ -31,23 +37,20 @@ export type BuildOptionsLike = {
31
37
  assetsDirPath: string;
32
38
  urlPathname: string | undefined;
33
39
  npmWorkspaceRootDirPath: string;
40
+ reactAppRootDirPath: string;
41
+ keycloakifyBuildDirPath: string;
34
42
  };
35
43
 
36
44
  assert<BuildOptions extends BuildOptionsLike ? true : false>();
37
45
 
38
- export async function generateSrcMainResources(params: {
39
- themeName: string;
40
- themeSrcDirPath: string;
41
- keycloakifySrcDirPath: string;
42
- buildOptions: BuildOptionsLike;
43
- keycloakifyVersion: string;
44
- srcMainResourcesDirPath: string;
45
- }): Promise<{ doesImplementAccountTheme: boolean }> {
46
- const { themeName, themeSrcDirPath, keycloakifySrcDirPath, buildOptions, keycloakifyVersion, srcMainResourcesDirPath } = params;
46
+ export async function generateSrcMainResourcesForMainTheme(params: { themeName: string; buildOptions: BuildOptionsLike }): Promise<void> {
47
+ const { themeName, buildOptions } = params;
48
+
49
+ const { themeSrcDirPath } = getThemeSrcDirPath({ "reactAppRootDirPath": buildOptions.reactAppRootDirPath });
47
50
 
48
51
  const getThemeTypeDirPath = (params: { themeType: ThemeType | "email" }) => {
49
52
  const { themeType } = params;
50
- return pathJoin(srcMainResourcesDirPath, "theme", themeName, themeType);
53
+ return pathJoin(buildOptions.keycloakifyBuildDirPath, "src", "main", "resources", "theme", themeName, themeType);
51
54
  };
52
55
 
53
56
  const cssGlobalsToDefine: Record<string, string> = {};
@@ -74,7 +77,7 @@ export async function generateSrcMainResources(params: {
74
77
  rmSync(destDirPath, { "recursive": true, "force": true });
75
78
 
76
79
  if (themeType === "account" && implementedThemeTypes.login) {
77
- // NOTE: We prevend doing it twice, it has been done for the login theme.
80
+ // NOTE: We prevent doing it twice, it has been done for the login theme.
78
81
 
79
82
  transformCodebase({
80
83
  "srcDirPath": pathJoin(
@@ -136,10 +139,9 @@ export async function generateSrcMainResources(params: {
136
139
  "indexHtmlCode": fs.readFileSync(pathJoin(buildOptions.reactAppBuildDirPath, "index.html")).toString("utf8"),
137
140
  cssGlobalsToDefine,
138
141
  buildOptions,
139
- keycloakifyVersion,
142
+ "keycloakifyVersion": readThisNpmPackageVersion(),
140
143
  themeType,
141
144
  "fieldNames": readFieldNameUsage({
142
- keycloakifySrcDirPath,
143
145
  themeSrcDirPath,
144
146
  themeType
145
147
  })
@@ -228,40 +230,32 @@ export async function generateSrcMainResources(params: {
228
230
  });
229
231
  }
230
232
 
231
- const parsedKeycloakThemeJson: { themes: { name: string; types: string[] }[] } = { "themes": [] };
232
-
233
- parsedKeycloakThemeJson.themes.push({
234
- "name": themeName,
235
- "types": Object.entries(implementedThemeTypes)
236
- .filter(([, isImplemented]) => isImplemented)
237
- .map(([themeType]) => themeType)
238
- });
239
-
240
- account_specific_extra_work: {
241
- if (!implementedThemeTypes.account) {
242
- break account_specific_extra_work;
243
- }
244
-
233
+ if (implementedThemeTypes.account) {
245
234
  await bringInAccountV1({
246
- srcMainResourcesDirPath,
247
235
  buildOptions
248
236
  });
249
-
250
- parsedKeycloakThemeJson.themes.push({
251
- "name": accountV1ThemeName,
252
- "types": ["account"]
253
- });
254
237
  }
255
238
 
256
239
  {
257
- const keycloakThemeJsonFilePath = pathJoin(srcMainResourcesDirPath, "META-INF", "keycloak-themes.json");
240
+ const metaInfKeycloakThemes: MetaInfKeycloakTheme = { "themes": [] };
258
241
 
259
- try {
260
- fs.mkdirSync(pathDirname(keycloakThemeJsonFilePath));
261
- } catch {}
242
+ metaInfKeycloakThemes.themes.push({
243
+ "name": themeName,
244
+ "types": objectEntries(implementedThemeTypes)
245
+ .filter(([, isImplemented]) => isImplemented)
246
+ .map(([themeType]) => themeType)
247
+ });
262
248
 
263
- fs.writeFileSync(keycloakThemeJsonFilePath, Buffer.from(JSON.stringify(parsedKeycloakThemeJson, null, 2), "utf8"));
264
- }
249
+ if (implementedThemeTypes.account) {
250
+ metaInfKeycloakThemes.themes.push({
251
+ "name": accountV1ThemeName,
252
+ "types": ["account"]
253
+ });
254
+ }
265
255
 
266
- return { "doesImplementAccountTheme": implementedThemeTypes.account };
256
+ writeMetaInfKeycloakThemes({
257
+ "keycloakifyBuildDirPath": buildOptions.keycloakifyBuildDirPath,
258
+ metaInfKeycloakThemes
259
+ });
260
+ }
267
261
  }
@@ -0,0 +1,56 @@
1
+ import { join as pathJoin, extname as pathExtname, sep as pathSep } from "path";
2
+ import { transformCodebase } from "../../tools/transformCodebase";
3
+ import type { BuildOptions } from "../../shared/buildOptions";
4
+ import { readMetaInfKeycloakThemes, writeMetaInfKeycloakThemes } from "../../shared/metaInfKeycloakThemes";
5
+ import { assert } from "tsafe/assert";
6
+
7
+ export type BuildOptionsLike = {
8
+ keycloakifyBuildDirPath: string;
9
+ };
10
+
11
+ assert<BuildOptions extends BuildOptionsLike ? true : false>();
12
+
13
+ export function generateSrcMainResourcesForThemeVariant(params: { themeName: string; themeVariantName: string; buildOptions: BuildOptionsLike }) {
14
+ const { themeName, themeVariantName, buildOptions } = params;
15
+
16
+ const mainThemeDirPath = pathJoin(buildOptions.keycloakifyBuildDirPath, "src", "main", "resources", "theme", themeName);
17
+
18
+ transformCodebase({
19
+ "srcDirPath": mainThemeDirPath,
20
+ "destDirPath": pathJoin(mainThemeDirPath, "..", themeVariantName),
21
+ "transformSourceCode": ({ fileRelativePath, sourceCode }) => {
22
+ if (pathExtname(fileRelativePath) === ".ftl" && fileRelativePath.split(pathSep).length === 2) {
23
+ const modifiedSourceCode = Buffer.from(
24
+ Buffer.from(sourceCode)
25
+ .toString("utf-8")
26
+ .replace(`out["themeName"] = "${themeName}";`, `out["themeName"] = "${themeVariantName}";`),
27
+ "utf8"
28
+ );
29
+
30
+ assert(Buffer.compare(modifiedSourceCode, sourceCode) !== 0);
31
+
32
+ return { modifiedSourceCode };
33
+ }
34
+
35
+ return { "modifiedSourceCode": sourceCode };
36
+ }
37
+ });
38
+
39
+ {
40
+ const updatedMetaInfKeycloakThemes = readMetaInfKeycloakThemes({ "keycloakifyBuildDirPath": buildOptions.keycloakifyBuildDirPath });
41
+
42
+ updatedMetaInfKeycloakThemes.themes.push({
43
+ "name": themeVariantName,
44
+ "types": (() => {
45
+ const theme = updatedMetaInfKeycloakThemes.themes.find(({ name }) => name === themeName);
46
+ assert(theme !== undefined);
47
+ return theme.types;
48
+ })()
49
+ });
50
+
51
+ writeMetaInfKeycloakThemes({
52
+ "keycloakifyBuildDirPath": buildOptions.keycloakifyBuildDirPath,
53
+ "metaInfKeycloakThemes": updatedMetaInfKeycloakThemes
54
+ });
55
+ }
56
+ }
@@ -0,0 +1 @@
1
+ export * from "./generateSrcMainResources";
@@ -1,10 +1,9 @@
1
1
  import { crawl } from "../../tools/crawl";
2
- import { accountThemePageIds, loginThemePageIds } from "../generateFtl";
3
2
  import { id } from "tsafe/id";
4
3
  import { removeDuplicates } from "evt/tools/reducers/removeDuplicates";
5
4
  import * as fs from "fs";
6
5
  import { join as pathJoin } from "path";
7
- import type { ThemeType } from "../../constants";
6
+ import { type ThemeType, accountThemePageIds, loginThemePageIds } from "../../shared/constants";
8
7
 
9
8
  export function readExtraPagesNames(params: { themeSrcDirPath: string; themeType: ThemeType }): string[] {
10
9
  const { themeSrcDirPath, themeType } = params;
@@ -1,15 +1,16 @@
1
1
  import { crawl } from "../../tools/crawl";
2
2
  import { join as pathJoin } from "path";
3
3
  import * as fs from "fs";
4
- import type { ThemeType } from "../../constants";
4
+ import type { ThemeType } from "../../shared/constants";
5
+ import { getThisCodebaseRootDirPath } from "../../tools/getThisCodebaseRootDirPath";
5
6
 
6
7
  /** Assumes the theme type exists */
7
- export function readFieldNameUsage(params: { keycloakifySrcDirPath: string; themeSrcDirPath: string; themeType: ThemeType }): string[] {
8
- const { keycloakifySrcDirPath, themeSrcDirPath, themeType } = params;
8
+ export function readFieldNameUsage(params: { themeSrcDirPath: string; themeType: ThemeType }): string[] {
9
+ const { themeSrcDirPath, themeType } = params;
9
10
 
10
11
  const fieldNames = new Set<string>();
11
12
 
12
- for (const srcDirPath of [pathJoin(keycloakifySrcDirPath, themeType), pathJoin(themeSrcDirPath, themeType)]) {
13
+ for (const srcDirPath of [pathJoin(getThisCodebaseRootDirPath(), "src", themeType), pathJoin(themeSrcDirPath, themeType)]) {
13
14
  const filePaths = crawl({ "dirPath": srcDirPath, "returnedPathsType": "absolute" }).filter(filePath => /\.(ts|tsx|js|jsx)$/.test(filePath));
14
15
 
15
16
  for (const filePath of filePaths) {
@@ -1,10 +1,12 @@
1
1
  import * as fs from "fs";
2
2
  import { join as pathJoin, relative as pathRelative, basename as pathBasename } from "path";
3
3
  import { assert } from "tsafe/assert";
4
- import type { BuildOptions } from "./buildOptions";
4
+ import type { BuildOptions } from "../shared/buildOptions";
5
+ import { accountV1ThemeName } from "../shared/constants";
5
6
 
6
7
  export type BuildOptionsLike = {
7
8
  keycloakifyBuildDirPath: string;
9
+ themeNames: string[];
8
10
  };
9
11
 
10
12
  assert<BuildOptions extends BuildOptionsLike ? true : false>();
@@ -15,11 +17,14 @@ const containerName = "keycloak-testing-container";
15
17
  const keycloakVersion = "24.0.4";
16
18
 
17
19
  /** Files for being able to run a hot reload keycloak container */
18
- export function generateStartKeycloakTestingContainer(params: { jarFilePath: string; buildOptions: BuildOptionsLike }) {
19
- const { jarFilePath, buildOptions } = params;
20
+ export function generateStartKeycloakTestingContainer(params: {
21
+ jarFilePath: string;
22
+ doesImplementAccountTheme: boolean;
23
+ buildOptions: BuildOptionsLike;
24
+ }) {
25
+ const { jarFilePath, doesImplementAccountTheme, buildOptions } = params;
20
26
 
21
27
  const themeRelativeDirPath = pathJoin("src", "main", "resources", "theme");
22
- const themeDirPath = pathJoin(buildOptions.keycloakifyBuildDirPath, themeRelativeDirPath);
23
28
 
24
29
  fs.writeFileSync(
25
30
  pathJoin(buildOptions.keycloakifyBuildDirPath, generateStartKeycloakTestingContainer.basename),
@@ -40,18 +45,12 @@ export function generateStartKeycloakTestingContainer(params: { jarFilePath: str
40
45
  "$(pwd)",
41
46
  pathRelative(buildOptions.keycloakifyBuildDirPath, jarFilePath)
42
47
  )}":"/opt/keycloak/providers/${pathBasename(jarFilePath)}" \\`,
43
- ...fs
44
- .readdirSync(themeDirPath)
45
- .filter(name => fs.lstatSync(pathJoin(themeDirPath, name)).isDirectory())
46
- .map(
47
- themeName =>
48
- ` -v "${pathJoin("$(pwd)", themeRelativeDirPath, themeName).replace(
49
- /\\/g,
50
- "/"
51
- )}":"/opt/keycloak/themes/${themeName}":rw \\`
52
- ),
48
+ [...(doesImplementAccountTheme ? [accountV1ThemeName] : []), ...buildOptions.themeNames].map(
49
+ themeName =>
50
+ ` -v "${pathJoin("$(pwd)", themeRelativeDirPath, themeName).replace(/\\/g, "/")}":"/opt/keycloak/themes/${themeName}":rw \\`
51
+ ),
53
52
  ` -it quay.io/keycloak/keycloak:${keycloakVersion} \\`,
54
- ` start-dev --features=declarative-user-profile`,
53
+ ` start-dev`,
55
54
  ""
56
55
  ].join("\n"),
57
56
  "utf8"
@@ -1,8 +1 @@
1
- #!/usr/bin/env node
2
-
3
1
  export * from "./keycloakify";
4
- import { main } from "./keycloakify";
5
-
6
- if (require.main === module) {
7
- main();
8
- }
@@ -1,25 +1,56 @@
1
- import { generateTheme } from "./generateTheme";
1
+ 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
- import { generateStartKeycloakTestingContainer } from "./generateStartKeycloakTestingContainer";
5
4
  import * as fs from "fs";
6
- import { readBuildOptions } from "./buildOptions";
7
- import { getLogger } from "../tools/logger";
8
- import { getThemeSrcDirPath } from "../getThemeSrcDirPath";
9
- import { getThisCodebaseRootDirPath } from "../tools/getThisCodebaseRootDirPath";
10
- import { readThisNpmProjectVersion } from "../tools/readThisNpmProjectVersion";
11
- import { keycloakifyBuildOptionsForPostPostBuildScriptEnvName } from "../constants";
5
+ import { readBuildOptions } from "../shared/buildOptions";
6
+ import { vitePluginSubScriptEnvNames } from "../shared/constants";
12
7
  import { buildJars } from "./buildJars";
8
+ import type { CliCommandOptions } from "../main";
9
+ import chalk from "chalk";
10
+ import { readThisNpmPackageVersion } from "../tools/readThisNpmPackageVersion";
11
+ import * as os from "os";
13
12
 
14
- export async function main() {
15
- const buildOptions = readBuildOptions({
16
- "processArgv": process.argv.slice(2)
17
- });
13
+ export async function command(params: { cliCommandOptions: CliCommandOptions }) {
14
+ exit_if_maven_not_installed: {
15
+ let commandOutput: Buffer | undefined = undefined;
18
16
 
19
- const logger = getLogger({ "isSilent": buildOptions.isSilent });
20
- logger.log("🔏 Building the keycloak theme...⌚");
17
+ try {
18
+ commandOutput = child_process.execSync("mvn --version", { "stdio": ["ignore", "pipe", "ignore"] });
19
+ } catch {}
21
20
 
22
- const { themeSrcDirPath } = getThemeSrcDirPath({ "reactAppRootDirPath": buildOptions.reactAppRootDirPath });
21
+ if (commandOutput?.toString("utf8").includes("Apache Maven")) {
22
+ break exit_if_maven_not_installed;
23
+ }
24
+
25
+ const installationCommand = (() => {
26
+ switch (os.platform()) {
27
+ case "darwin":
28
+ return "brew install mvn";
29
+ case "win32":
30
+ return "choco install mvn";
31
+ case "linux":
32
+ default:
33
+ return "sudo apt-get install mvn";
34
+ }
35
+ })();
36
+
37
+ console.log(`${chalk.red("Apache Maven required.")} Install it with \`${chalk.bold(installationCommand)}\` (for example)`);
38
+
39
+ process.exit(1);
40
+ }
41
+
42
+ const { cliCommandOptions } = params;
43
+
44
+ const buildOptions = readBuildOptions({ cliCommandOptions });
45
+
46
+ console.log(
47
+ [
48
+ chalk.cyan(`keycloakify v${readThisNpmPackageVersion()}`),
49
+ chalk.green(`Building the keycloak theme in .${pathSep}${pathRelative(process.cwd(), buildOptions.keycloakifyBuildDirPath)} ...`)
50
+ ].join(" ")
51
+ );
52
+
53
+ const startTime = Date.now();
23
54
 
24
55
  {
25
56
  if (!fs.existsSync(buildOptions.keycloakifyBuildDirPath)) {
@@ -29,12 +60,7 @@ export async function main() {
29
60
  fs.writeFileSync(pathJoin(buildOptions.keycloakifyBuildDirPath, ".gitignore"), Buffer.from("*", "utf8"));
30
61
  }
31
62
 
32
- const { doesImplementAccountTheme } = await generateTheme({
33
- themeSrcDirPath,
34
- "keycloakifySrcDirPath": pathJoin(getThisCodebaseRootDirPath(), "src"),
35
- "keycloakifyVersion": readThisNpmProjectVersion(),
36
- buildOptions
37
- });
63
+ await generateSrcMainResources({ buildOptions });
38
64
 
39
65
  run_post_build_script: {
40
66
  if (buildOptions.bundler !== "vite") {
@@ -45,55 +71,12 @@ export async function main() {
45
71
  "cwd": buildOptions.reactAppRootDirPath,
46
72
  "env": {
47
73
  ...process.env,
48
- [keycloakifyBuildOptionsForPostPostBuildScriptEnvName]: JSON.stringify(buildOptions)
74
+ [vitePluginSubScriptEnvNames.runPostBuildScript]: JSON.stringify(buildOptions)
49
75
  }
50
76
  });
51
77
  }
52
78
 
53
- const { lastJarFileBasename } = await buildJars({
54
- doesImplementAccountTheme,
55
- buildOptions
56
- });
79
+ await buildJars({ buildOptions });
57
80
 
58
- generateStartKeycloakTestingContainer({
59
- "jarFilePath": pathJoin(buildOptions.keycloakifyBuildDirPath, lastJarFileBasename),
60
- buildOptions
61
- });
62
-
63
- logger.log(
64
- [
65
- `✅ Your keycloak theme has been generated and bundled into .${pathSep}${pathJoin(
66
- pathRelative(buildOptions.reactAppRootDirPath, buildOptions.keycloakifyBuildDirPath),
67
- "keycloak-theme-for-kc-*.jar"
68
- )}`,
69
- "",
70
- `To test your theme locally you can spin up a Keycloak container image with the theme pre loaded by running:`,
71
- "",
72
- `👉 $ .${pathSep}${pathRelative(
73
- buildOptions.reactAppRootDirPath,
74
- pathJoin(buildOptions.keycloakifyBuildDirPath, generateStartKeycloakTestingContainer.basename)
75
- )} 👈`,
76
- ``,
77
- `Once your container is up and running: `,
78
- "- Log into the admin console 👉 http://localhost:8080/admin username: admin, password: admin 👈",
79
- `- Create a realm: Master -> AddRealm -> Name: myrealm`,
80
- `- Enable registration: Realm settings -> Login tab -> User registration: on`,
81
- `- Enable the Account theme (optional): Realm settings -> Themes tab -> Account theme: ${buildOptions.themeNames[0]}`,
82
- ` Clients -> account -> Login theme: ${buildOptions.themeNames[0]}`,
83
- `- Enable the email theme (optional): Realm settings -> Themes tab -> Email theme: ${buildOptions.themeNames[0]} (option will appear only if you have ran npx initialize-email-theme)`,
84
- `- Create a client Clients -> Create -> Client ID: myclient`,
85
- ` Root URL: https://www.keycloak.org/app/`,
86
- ` Valid redirect URIs: https://www.keycloak.org/app* http://localhost* (localhost is optional)`,
87
- ` Valid post logout redirect URIs: https://www.keycloak.org/app* http://localhost*`,
88
- ` Web origins: *`,
89
- ` Login Theme: ${buildOptions.themeNames[0]}`,
90
- ` Save (button at the bottom of the page)`,
91
- ``,
92
- `- Go to 👉 https://www.keycloak.org/app/ 👈 Click "Save" then "Sign in". You should see your login page`,
93
- `- Got to 👉 http://localhost:8080/realms/myrealm/account 👈 to see your account theme`,
94
- ``,
95
- `Video tutorial: https://youtu.be/WMyGZNHQkjU`,
96
- ``
97
- ].join("\n")
98
- );
81
+ console.log(chalk.green(`✓ built in ${((Date.now() - startTime) / 1000).toFixed(2)}s`));
99
82
  }
@@ -1,7 +1,7 @@
1
1
  import * as crypto from "crypto";
2
- import type { BuildOptions } from "../buildOptions";
2
+ import type { BuildOptions } from "../../shared/buildOptions";
3
3
  import { assert } from "tsafe/assert";
4
- import { basenameOfTheKeycloakifyResourcesDir } from "../../constants";
4
+ import { basenameOfTheKeycloakifyResourcesDir } from "../../shared/constants";
5
5
 
6
6
  export type BuildOptionsLike = {
7
7
  urlPathname: string | undefined;
@@ -1,6 +1,6 @@
1
- import type { BuildOptions } from "../buildOptions";
1
+ import type { BuildOptions } from "../../shared/buildOptions";
2
2
  import { assert } from "tsafe/assert";
3
- import { basenameOfTheKeycloakifyResourcesDir } from "../../constants";
3
+ import { basenameOfTheKeycloakifyResourcesDir } from "../../shared/constants";
4
4
 
5
5
  export type BuildOptionsLike = {
6
6
  urlPathname: string | undefined;
@@ -1,5 +1,5 @@
1
1
  import { assert } from "tsafe/assert";
2
- import type { BuildOptions } from "../../buildOptions";
2
+ import type { BuildOptions } from "../../../shared/buildOptions";
3
3
  import { replaceImportsInJsCode_vite } from "./vite";
4
4
  import { replaceImportsInJsCode_webpack } from "./webpack";
5
5
  import * as fs from "fs";
@@ -1,6 +1,6 @@
1
- import { nameOfTheGlobal, basenameOfTheKeycloakifyResourcesDir } from "../../../constants";
1
+ import { nameOfTheGlobal, basenameOfTheKeycloakifyResourcesDir } from "../../../shared/constants";
2
2
  import { assert } from "tsafe/assert";
3
- import type { BuildOptions } from "../../buildOptions";
3
+ import type { BuildOptions } from "../../../shared/buildOptions";
4
4
  import * as nodePath from "path";
5
5
  import { replaceAll } from "../../../tools/String.prototype.replaceAll";
6
6
 
@@ -1,6 +1,6 @@
1
- import { nameOfTheGlobal, basenameOfTheKeycloakifyResourcesDir } from "../../../constants";
1
+ import { nameOfTheGlobal, basenameOfTheKeycloakifyResourcesDir } from "../../../shared/constants";
2
2
  import { assert } from "tsafe/assert";
3
- import type { BuildOptions } from "../../buildOptions";
3
+ import type { BuildOptions } from "../../../shared/buildOptions";
4
4
  import * as nodePath from "path";
5
5
  import { replaceAll } from "../../../tools/String.prototype.replaceAll";
6
6