keycloakify 10.0.0-rc.3 → 10.0.0-rc.5

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 (382) 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 +1 -1
  6. package/account/Template.js.map +1 -1
  7. package/account/i18n/baseMessages/index.js.map +1 -1
  8. package/account/i18n/i18n.js +1 -1
  9. package/account/i18n/i18n.js.map +1 -1
  10. package/account/index.d.ts +1 -1
  11. package/account/kcContext/KcContext.d.ts +62 -44
  12. package/account/kcContext/KcContext.js.map +1 -1
  13. package/account/kcContext/createGetKcContext.d.ts +3 -3
  14. package/account/kcContext/createGetKcContext.js.map +1 -1
  15. package/account/kcContext/getKcContextFromWindow.js +1 -1
  16. package/account/kcContext/getKcContextFromWindow.js.map +1 -1
  17. package/account/kcContext/kcContextMocks.js +22 -14
  18. package/account/kcContext/kcContextMocks.js.map +1 -1
  19. package/account/pages/Account.js +1 -1
  20. package/account/pages/Account.js.map +1 -1
  21. package/account/pages/Applications.js +3 -3
  22. package/account/pages/Applications.js.map +1 -1
  23. package/account/pages/FederatedIdentity.d.ts +7 -0
  24. package/account/pages/FederatedIdentity.js +8 -0
  25. package/account/pages/FederatedIdentity.js.map +1 -0
  26. package/account/pages/Log.js +2 -2
  27. package/account/pages/Log.js.map +1 -1
  28. package/account/pages/Password.js +4 -6
  29. package/account/pages/Password.js.map +1 -1
  30. package/account/pages/Sessions.js +1 -5
  31. package/account/pages/Sessions.js.map +1 -1
  32. package/account/pages/Totp.js +2 -2
  33. package/account/pages/Totp.js.map +1 -1
  34. package/bin/copy-keycloak-resources-to-public.d.ts +3 -13
  35. package/bin/copy-keycloak-resources-to-public.js +22 -166
  36. package/bin/copy-keycloak-resources-to-public.js.map +1 -1
  37. package/bin/download-builtin-keycloak-theme.d.ts +3 -9
  38. package/bin/download-builtin-keycloak-theme.js +15 -291
  39. package/bin/download-builtin-keycloak-theme.js.map +1 -1
  40. package/bin/eject-keycloak-page.d.ts +4 -1
  41. package/bin/eject-keycloak-page.js +59 -54
  42. package/bin/eject-keycloak-page.js.map +1 -1
  43. package/bin/initialize-email-theme.d.ts +4 -2
  44. package/bin/initialize-email-theme.js +17 -19
  45. package/bin/initialize-email-theme.js.map +1 -1
  46. package/bin/keycloakify/buildJars/buildJar.d.ts +1 -0
  47. package/bin/keycloakify/buildJars/buildJar.js +14 -25
  48. package/bin/keycloakify/buildJars/buildJar.js.map +1 -1
  49. package/bin/keycloakify/buildJars/buildJars.d.ts +1 -4
  50. package/bin/keycloakify/buildJars/buildJars.js +17 -8
  51. package/bin/keycloakify/buildJars/buildJars.js.map +1 -1
  52. package/bin/keycloakify/buildJars/getKeycloakVersionRangeForJar.d.ts +2 -1
  53. package/bin/keycloakify/buildJars/getKeycloakVersionRangeForJar.js +39 -17
  54. package/bin/keycloakify/buildJars/getKeycloakVersionRangeForJar.js.map +1 -1
  55. package/bin/keycloakify/generateFtl/generateFtl.d.ts +1 -1
  56. package/bin/keycloakify/generateFtl/generateFtl.js +1 -1
  57. package/bin/keycloakify/generateFtl/generateFtl.js.map +1 -1
  58. package/bin/keycloakify/generateFtl/index.d.ts +0 -1
  59. package/bin/keycloakify/generateFtl/index.js +0 -1
  60. package/bin/keycloakify/generateFtl/index.js.map +1 -1
  61. package/bin/keycloakify/{generateTheme → generateSrcMainResources}/bringInAccountV1.d.ts +1 -1
  62. package/bin/keycloakify/{generateTheme → generateSrcMainResources}/bringInAccountV1.js +7 -7
  63. package/bin/keycloakify/generateSrcMainResources/bringInAccountV1.js.map +1 -0
  64. package/bin/keycloakify/{generateTheme → generateSrcMainResources}/generateMessageProperties.d.ts +1 -1
  65. package/bin/keycloakify/generateSrcMainResources/generateMessageProperties.js.map +1 -0
  66. package/bin/keycloakify/generateSrcMainResources/generateSrcMainResources.d.ts +7 -0
  67. package/bin/keycloakify/{generateTheme/generateTheme.js → generateSrcMainResources/generateSrcMainResources.js} +13 -19
  68. package/bin/keycloakify/generateSrcMainResources/generateSrcMainResources.js.map +1 -0
  69. package/bin/keycloakify/{generateTheme/generateSrcMainResources.d.ts → generateSrcMainResources/generateSrcMainResourcesForMainTheme.d.ts} +4 -8
  70. package/bin/keycloakify/{generateTheme/generateSrcMainResources.js → generateSrcMainResources/generateSrcMainResourcesForMainTheme.js} +54 -52
  71. package/bin/keycloakify/generateSrcMainResources/generateSrcMainResourcesForMainTheme.js.map +1 -0
  72. package/bin/keycloakify/generateSrcMainResources/generateSrcMainResourcesForThemeVariant.d.ts +8 -0
  73. package/bin/keycloakify/generateSrcMainResources/generateSrcMainResourcesForThemeVariant.js +47 -0
  74. package/bin/keycloakify/generateSrcMainResources/generateSrcMainResourcesForThemeVariant.js.map +1 -0
  75. package/bin/keycloakify/generateSrcMainResources/index.d.ts +1 -0
  76. package/bin/keycloakify/{buildOptions → generateSrcMainResources}/index.js +1 -1
  77. package/bin/keycloakify/generateSrcMainResources/index.js.map +1 -0
  78. package/bin/keycloakify/{generateTheme → generateSrcMainResources}/readExtraPageNames.d.ts +1 -1
  79. package/bin/keycloakify/{generateTheme → generateSrcMainResources}/readExtraPageNames.js +3 -3
  80. package/bin/keycloakify/generateSrcMainResources/readExtraPageNames.js.map +1 -0
  81. package/bin/keycloakify/{generateTheme → generateSrcMainResources}/readFieldNameUsage.d.ts +1 -2
  82. package/bin/keycloakify/{generateTheme → generateSrcMainResources}/readFieldNameUsage.js +3 -2
  83. package/bin/keycloakify/generateSrcMainResources/readFieldNameUsage.js.map +1 -0
  84. package/bin/keycloakify/generateStartKeycloakTestingContainer.js +1 -1
  85. package/bin/keycloakify/generateStartKeycloakTestingContainer.js.map +1 -1
  86. package/bin/keycloakify/index.d.ts +0 -1
  87. package/bin/keycloakify/index.js +0 -5
  88. package/bin/keycloakify/index.js.map +1 -1
  89. package/bin/keycloakify/keycloakify.d.ts +4 -1
  90. package/bin/keycloakify/keycloakify.js +15 -61
  91. package/bin/keycloakify/keycloakify.js.map +1 -1
  92. package/bin/keycloakify/replacers/replaceImportsInCssCode.js +1 -1
  93. package/bin/keycloakify/replacers/replaceImportsInCssCode.js.map +1 -1
  94. package/bin/keycloakify/replacers/replaceImportsInInlineCssCode.js +1 -1
  95. package/bin/keycloakify/replacers/replaceImportsInInlineCssCode.js.map +1 -1
  96. package/bin/keycloakify/replacers/replaceImportsInJsCode/replaceImportsInJsCode.js.map +1 -1
  97. package/bin/keycloakify/replacers/replaceImportsInJsCode/vite.js +1 -1
  98. package/bin/keycloakify/replacers/replaceImportsInJsCode/vite.js.map +1 -1
  99. package/bin/keycloakify/replacers/replaceImportsInJsCode/webpack.js +1 -1
  100. package/bin/keycloakify/replacers/replaceImportsInJsCode/webpack.js.map +1 -1
  101. package/bin/main.d.ts +5 -0
  102. package/bin/main.js +224 -0
  103. package/bin/main.js.map +1 -0
  104. package/bin/shared/KeycloakVersionRange.d.ts +5 -0
  105. package/bin/shared/KeycloakVersionRange.js +3 -0
  106. package/bin/shared/KeycloakVersionRange.js.map +1 -0
  107. package/bin/{keycloakify/buildOptions → shared}/buildOptions.d.ts +17 -1
  108. package/bin/{keycloakify/buildOptions → shared}/buildOptions.js +72 -35
  109. package/bin/shared/buildOptions.js.map +1 -0
  110. package/bin/{constants.d.ts → shared/constants.d.ts} +4 -2
  111. package/bin/shared/constants.js +15 -0
  112. package/bin/shared/constants.js.map +1 -0
  113. package/bin/shared/copyKeycloakResourcesToPublic.d.ts +8 -0
  114. package/bin/shared/copyKeycloakResourcesToPublic.js +175 -0
  115. package/bin/shared/copyKeycloakResourcesToPublic.js.map +1 -0
  116. package/bin/{downloadAndUnzip.js → shared/downloadAndUnzip.js} +11 -11
  117. package/bin/shared/downloadAndUnzip.js.map +1 -0
  118. package/bin/shared/downloadBuiltinKeycloakTheme.d.ts +9 -0
  119. package/bin/shared/downloadBuiltinKeycloakTheme.js +316 -0
  120. package/bin/shared/downloadBuiltinKeycloakTheme.js.map +1 -0
  121. package/bin/{keycloakify/generateTheme → shared}/downloadKeycloakStaticResources.d.ts +1 -1
  122. package/bin/{keycloakify/generateTheme → shared}/downloadKeycloakStaticResources.js +7 -7
  123. package/bin/shared/downloadKeycloakStaticResources.js.map +1 -0
  124. package/bin/shared/getJarFileBasename.d.ts +6 -0
  125. package/bin/shared/getJarFileBasename.js +10 -0
  126. package/bin/shared/getJarFileBasename.js.map +1 -0
  127. package/bin/{getThemeSrcDirPath.js → shared/getThemeSrcDirPath.js} +1 -1
  128. package/bin/shared/getThemeSrcDirPath.js.map +1 -0
  129. package/bin/shared/metaInfKeycloakThemes.d.ts +17 -0
  130. package/bin/shared/metaInfKeycloakThemes.js +51 -0
  131. package/bin/shared/metaInfKeycloakThemes.js.map +1 -0
  132. package/bin/{keycloakify/generateFtl/pageId.d.ts → shared/pageIds.d.ts} +1 -1
  133. package/bin/{keycloakify/generateFtl/pageId.js → shared/pageIds.js} +10 -2
  134. package/bin/shared/pageIds.js.map +1 -0
  135. package/bin/shared/promptKeycloakVersion.d.ts +5 -0
  136. package/bin/{promptKeycloakVersion.js → shared/promptKeycloakVersion.js} +32 -48
  137. package/bin/shared/promptKeycloakVersion.js.map +1 -0
  138. package/bin/start-keycloak-container.d.ts +4 -0
  139. package/bin/start-keycloak-container.js +209 -0
  140. package/bin/start-keycloak-container.js.map +1 -0
  141. package/bin/tools/SemVer.js +1 -1
  142. package/bin/tools/SemVer.js.map +1 -1
  143. package/bin/tools/String.prototype.replaceAll.js.map +1 -1
  144. package/bin/tools/crawl.js.map +1 -1
  145. package/bin/tools/crc32.js.map +1 -1
  146. package/bin/tools/deflate.js +10 -1
  147. package/bin/tools/deflate.js.map +1 -1
  148. package/bin/tools/fetchProxyOptions.js +9 -9
  149. package/bin/tools/fetchProxyOptions.js.map +1 -1
  150. package/bin/tools/fs.rm.js.map +1 -1
  151. package/bin/tools/fs.rmSync.js +4 -4
  152. package/bin/tools/fs.rmSync.js.map +1 -1
  153. package/bin/tools/getAbsoluteAndInOsFormatPath.js.map +1 -1
  154. package/bin/{keycloakify/buildOptions → tools}/getNpmWorkspaceRootDirPath.js +1 -13
  155. package/bin/tools/getNpmWorkspaceRootDirPath.js.map +1 -0
  156. package/bin/tools/getThisCodebaseRootDirPath.js.map +1 -1
  157. package/bin/tools/logger.d.ts +1 -1
  158. package/bin/tools/logger.js.map +1 -1
  159. package/bin/tools/octokit-addons/getLatestsSemVersionedTag.js +21 -24
  160. package/bin/tools/octokit-addons/getLatestsSemVersionedTag.js.map +1 -1
  161. package/bin/tools/octokit-addons/listTags.js +3 -2
  162. package/bin/tools/octokit-addons/listTags.js.map +1 -1
  163. package/bin/tools/transformCodebase.js.map +1 -1
  164. package/bin/tools/trimIndent.js.map +1 -1
  165. package/bin/tools/unzip.js.map +1 -1
  166. package/lib/BASE_URL.js.map +1 -1
  167. package/lib/keycloakJsAdapter.js.map +1 -1
  168. package/login/Fallback.js.map +1 -1
  169. package/login/Template.js +3 -3
  170. package/login/Template.js.map +1 -1
  171. package/login/UserProfileFormFields.js +17 -19
  172. package/login/UserProfileFormFields.js.map +1 -1
  173. package/login/i18n/baseMessages/index.js.map +1 -1
  174. package/login/i18n/i18n.js +1 -1
  175. package/login/i18n/i18n.js.map +1 -1
  176. package/login/index.d.ts +1 -1
  177. package/login/kcContext/KcContext.js.map +1 -1
  178. package/login/kcContext/createGetKcContext.d.ts +3 -3
  179. package/login/kcContext/createGetKcContext.js.map +1 -1
  180. package/login/kcContext/getKcContextFromWindow.js +1 -1
  181. package/login/kcContext/getKcContextFromWindow.js.map +1 -1
  182. package/login/kcContext/kcContextMocks.js +1 -1
  183. package/login/kcContext/kcContextMocks.js.map +1 -1
  184. package/login/lib/useDownloadTerms.js.map +1 -1
  185. package/login/lib/useUserProfileForm.js +9 -9
  186. package/login/lib/useUserProfileForm.js.map +1 -1
  187. package/login/pages/Code.js +1 -1
  188. package/login/pages/Code.js.map +1 -1
  189. package/login/pages/DeleteAccountConfirm.js +1 -1
  190. package/login/pages/DeleteAccountConfirm.js.map +1 -1
  191. package/login/pages/DeleteCredential.js +1 -1
  192. package/login/pages/DeleteCredential.js.map +1 -1
  193. package/login/pages/Error.js +1 -1
  194. package/login/pages/Error.js.map +1 -1
  195. package/login/pages/FrontchannelLogout.js +1 -1
  196. package/login/pages/FrontchannelLogout.js.map +1 -1
  197. package/login/pages/IdpReviewUserProfile.js +1 -1
  198. package/login/pages/IdpReviewUserProfile.js.map +1 -1
  199. package/login/pages/Info.js +5 -5
  200. package/login/pages/Info.js.map +1 -1
  201. package/login/pages/Login.js +4 -4
  202. package/login/pages/Login.js.map +1 -1
  203. package/login/pages/LoginConfigTotp.js +2 -2
  204. package/login/pages/LoginConfigTotp.js.map +1 -1
  205. package/login/pages/LoginIdpLinkConfirm.js +1 -1
  206. package/login/pages/LoginIdpLinkConfirm.js.map +1 -1
  207. package/login/pages/LoginIdpLinkEmail.js +1 -1
  208. package/login/pages/LoginIdpLinkEmail.js.map +1 -1
  209. package/login/pages/LoginOauth2DeviceVerifyUserCode.js +1 -1
  210. package/login/pages/LoginOauth2DeviceVerifyUserCode.js.map +1 -1
  211. package/login/pages/LoginOauthGrant.js +2 -2
  212. package/login/pages/LoginOauthGrant.js.map +1 -1
  213. package/login/pages/LoginOtp.js +1 -1
  214. package/login/pages/LoginOtp.js.map +1 -1
  215. package/login/pages/LoginPageExpired.js +1 -1
  216. package/login/pages/LoginPageExpired.js.map +1 -1
  217. package/login/pages/LoginPassword.js +3 -3
  218. package/login/pages/LoginPassword.js.map +1 -1
  219. package/login/pages/LoginRecoveryAuthnCodeConfig.js +3 -3
  220. package/login/pages/LoginRecoveryAuthnCodeConfig.js.map +1 -1
  221. package/login/pages/LoginRecoveryAuthnCodeInput.js +1 -1
  222. package/login/pages/LoginRecoveryAuthnCodeInput.js.map +1 -1
  223. package/login/pages/LoginResetOtp.js +1 -1
  224. package/login/pages/LoginResetOtp.js.map +1 -1
  225. package/login/pages/LoginResetPassword.js +2 -2
  226. package/login/pages/LoginResetPassword.js.map +1 -1
  227. package/login/pages/LoginUpdatePassword.js +3 -3
  228. package/login/pages/LoginUpdatePassword.js.map +1 -1
  229. package/login/pages/LoginUpdateProfile.js +2 -4
  230. package/login/pages/LoginUpdateProfile.js.map +1 -1
  231. package/login/pages/LoginUsername.js +3 -3
  232. package/login/pages/LoginUsername.js.map +1 -1
  233. package/login/pages/LoginVerifyEmail.js +1 -1
  234. package/login/pages/LoginVerifyEmail.js.map +1 -1
  235. package/login/pages/LoginX509Info.js +1 -1
  236. package/login/pages/LoginX509Info.js.map +1 -1
  237. package/login/pages/LogoutConfirm.js +1 -1
  238. package/login/pages/LogoutConfirm.js.map +1 -1
  239. package/login/pages/Register.js +4 -8
  240. package/login/pages/Register.js.map +1 -1
  241. package/login/pages/SamlPostForm.js +1 -1
  242. package/login/pages/SamlPostForm.js.map +1 -1
  243. package/login/pages/SelectAuthenticator.js +2 -2
  244. package/login/pages/SelectAuthenticator.js.map +1 -1
  245. package/login/pages/Terms.js +1 -1
  246. package/login/pages/Terms.js.map +1 -1
  247. package/login/pages/UpdateEmail.js +3 -5
  248. package/login/pages/UpdateEmail.js.map +1 -1
  249. package/login/pages/WebauthnAuthenticate.js +6 -6
  250. package/login/pages/WebauthnAuthenticate.js.map +1 -1
  251. package/login/pages/WebauthnError.js +2 -2
  252. package/login/pages/WebauthnError.js.map +1 -1
  253. package/login/pages/WebauthnRegister.js +3 -3
  254. package/login/pages/WebauthnRegister.js.map +1 -1
  255. package/package.json +125 -118
  256. package/src/PUBLIC_URL.ts +1 -1
  257. package/src/account/Fallback.tsx +3 -0
  258. package/src/account/index.ts +1 -1
  259. package/src/account/kcContext/KcContext.ts +73 -47
  260. package/src/account/kcContext/getKcContextFromWindow.ts +1 -1
  261. package/src/account/kcContext/kcContextMocks.ts +21 -15
  262. package/src/account/pages/Applications.tsx +2 -2
  263. package/src/account/pages/FederatedIdentity.tsx +58 -0
  264. package/src/account/pages/Log.tsx +1 -1
  265. package/src/account/pages/Sessions.tsx +0 -3
  266. package/src/account/pages/Totp.tsx +20 -21
  267. package/src/bin/copy-keycloak-resources-to-public.ts +10 -106
  268. package/src/bin/download-builtin-keycloak-theme.ts +13 -273
  269. package/src/bin/eject-keycloak-page.ts +13 -10
  270. package/src/bin/initialize-email-theme.ts +16 -17
  271. package/src/bin/keycloakify/buildJars/buildJar.ts +13 -17
  272. package/src/bin/keycloakify/buildJars/buildJars.ts +14 -15
  273. package/src/bin/keycloakify/buildJars/generatePom.ts +1 -1
  274. package/src/bin/keycloakify/buildJars/getKeycloakVersionRangeForJar.ts +45 -18
  275. package/src/bin/keycloakify/generateFtl/generateFtl.ts +2 -2
  276. package/src/bin/keycloakify/generateFtl/index.ts +0 -1
  277. package/src/bin/keycloakify/{generateTheme → generateSrcMainResources}/bringInAccountV1.ts +8 -7
  278. package/src/bin/keycloakify/{generateTheme → generateSrcMainResources}/generateMessageProperties.ts +1 -1
  279. package/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResources.ts +32 -0
  280. package/src/bin/keycloakify/{generateTheme/generateSrcMainResources.ts → generateSrcMainResources/generateSrcMainResourcesForMainTheme.ts} +38 -45
  281. package/src/bin/keycloakify/{generateTheme/generateThemeVariants.ts → generateSrcMainResources/generateSrcMainResourcesForThemeVariant.ts} +18 -12
  282. package/src/bin/keycloakify/generateSrcMainResources/index.ts +1 -0
  283. package/src/bin/keycloakify/{generateTheme → generateSrcMainResources}/readExtraPageNames.ts +2 -2
  284. package/src/bin/keycloakify/{generateTheme → generateSrcMainResources}/readFieldNameUsage.ts +5 -4
  285. package/src/bin/keycloakify/generateStartKeycloakTestingContainer.ts +2 -2
  286. package/src/bin/keycloakify/index.ts +0 -7
  287. package/src/bin/keycloakify/keycloakify.ts +16 -64
  288. package/src/bin/keycloakify/replacers/replaceImportsInCssCode.ts +2 -2
  289. package/src/bin/keycloakify/replacers/replaceImportsInInlineCssCode.ts +2 -2
  290. package/src/bin/keycloakify/replacers/replaceImportsInJsCode/replaceImportsInJsCode.ts +1 -1
  291. package/src/bin/keycloakify/replacers/replaceImportsInJsCode/vite.ts +2 -2
  292. package/src/bin/keycloakify/replacers/replaceImportsInJsCode/webpack.ts +2 -2
  293. package/src/bin/main.ts +111 -0
  294. package/src/bin/shared/KeycloakVersionRange.ts +7 -0
  295. package/src/bin/{keycloakify/buildOptions → shared}/buildOptions.ts +114 -24
  296. package/src/bin/{constants.ts → shared/constants.ts} +4 -2
  297. package/src/bin/shared/copyKeycloakResourcesToPublic.ts +87 -0
  298. package/src/bin/{downloadAndUnzip.ts → shared/downloadAndUnzip.ts} +6 -6
  299. package/src/bin/shared/downloadBuiltinKeycloakTheme.ts +264 -0
  300. package/src/bin/{keycloakify/generateTheme → shared}/downloadKeycloakStaticResources.ts +8 -8
  301. package/src/bin/shared/getJarFileBasename.ts +9 -0
  302. package/src/bin/{getThemeSrcDirPath.ts → shared/getThemeSrcDirPath.ts} +1 -1
  303. package/src/bin/shared/metaInfKeycloakThemes.ts +34 -0
  304. package/src/bin/{keycloakify/generateFtl/pageId.ts → shared/pageIds.ts} +9 -1
  305. package/src/bin/shared/promptKeycloakVersion.ts +69 -0
  306. package/src/bin/start-keycloak-container.ts +141 -0
  307. package/src/bin/tools/fs.rmSync.ts +4 -4
  308. package/src/bin/{keycloakify/buildOptions → tools}/getNpmWorkspaceRootDirPath.ts +1 -23
  309. package/src/login/UserProfileFormFields.tsx +2 -5
  310. package/src/login/index.ts +1 -1
  311. package/src/login/kcContext/KcContext.ts +2 -2
  312. package/src/login/kcContext/getKcContextFromWindow.ts +1 -1
  313. package/src/login/kcContext/kcContextMocks.ts +2 -2
  314. package/src/login/lib/useUserProfileForm.tsx +10 -10
  315. package/src/vite-plugin/vite-plugin.ts +30 -41
  316. package/tools/Array.prototype.every.js.map +1 -1
  317. package/tools/HTMLElement.prototype.prepend.js.map +1 -1
  318. package/tools/clsx.js.map +1 -1
  319. package/tools/deepAssign.js.map +1 -1
  320. package/tools/deepClone.js.map +1 -1
  321. package/tools/formatNumber.js.map +1 -1
  322. package/tools/memoize.js.map +1 -1
  323. package/tools/useInsertLinkTags.js.map +1 -1
  324. package/tools/useInsertScriptTags.js.map +1 -1
  325. package/tools/useSetClassName.js.map +1 -1
  326. package/vite-plugin/tsconfig.tsbuildinfo +1 -1
  327. package/vite-plugin/vite-plugin.d.ts +1 -2
  328. package/vite-plugin/vite-plugin.js +31 -51
  329. package/vite-plugin/vite-plugin.js.map +1 -1
  330. package/bin/constants.js +0 -13
  331. package/bin/constants.js.map +0 -1
  332. package/bin/downloadAndUnzip.js.map +0 -1
  333. package/bin/getThemeSrcDirPath.js.map +0 -1
  334. package/bin/keycloakify/buildOptions/UserProvidedBuildOptions.d.ts +0 -35
  335. package/bin/keycloakify/buildOptions/UserProvidedBuildOptions.js +0 -14
  336. package/bin/keycloakify/buildOptions/UserProvidedBuildOptions.js.map +0 -1
  337. package/bin/keycloakify/buildOptions/buildOptions.js.map +0 -1
  338. package/bin/keycloakify/buildOptions/getCacheDirPath.d.ts +0 -5
  339. package/bin/keycloakify/buildOptions/getCacheDirPath.js +0 -22
  340. package/bin/keycloakify/buildOptions/getCacheDirPath.js.map +0 -1
  341. package/bin/keycloakify/buildOptions/getNpmWorkspaceRootDirPath.js.map +0 -1
  342. package/bin/keycloakify/buildOptions/getReactAppRootDirPath.d.ts +0 -5
  343. package/bin/keycloakify/buildOptions/getReactAppRootDirPath.js +0 -26
  344. package/bin/keycloakify/buildOptions/getReactAppRootDirPath.js.map +0 -1
  345. package/bin/keycloakify/buildOptions/index.d.ts +0 -1
  346. package/bin/keycloakify/buildOptions/index.js.map +0 -1
  347. package/bin/keycloakify/buildOptions/parsedPackageJson.d.ts +0 -10
  348. package/bin/keycloakify/buildOptions/parsedPackageJson.js +0 -49
  349. package/bin/keycloakify/buildOptions/parsedPackageJson.js.map +0 -1
  350. package/bin/keycloakify/buildOptions/resolvedViteConfig.d.ts +0 -13
  351. package/bin/keycloakify/buildOptions/resolvedViteConfig.js +0 -77
  352. package/bin/keycloakify/buildOptions/resolvedViteConfig.js.map +0 -1
  353. package/bin/keycloakify/generateFtl/pageId.js.map +0 -1
  354. package/bin/keycloakify/generateTheme/bringInAccountV1.js.map +0 -1
  355. package/bin/keycloakify/generateTheme/downloadKeycloakStaticResources.js.map +0 -1
  356. package/bin/keycloakify/generateTheme/generateMessageProperties.js.map +0 -1
  357. package/bin/keycloakify/generateTheme/generateSrcMainResources.js.map +0 -1
  358. package/bin/keycloakify/generateTheme/generateTheme.d.ts +0 -13
  359. package/bin/keycloakify/generateTheme/generateTheme.js.map +0 -1
  360. package/bin/keycloakify/generateTheme/generateThemeVariants.d.ts +0 -5
  361. package/bin/keycloakify/generateTheme/generateThemeVariants.js +0 -67
  362. package/bin/keycloakify/generateTheme/generateThemeVariants.js.map +0 -1
  363. package/bin/keycloakify/generateTheme/index.d.ts +0 -1
  364. package/bin/keycloakify/generateTheme/index.js +0 -18
  365. package/bin/keycloakify/generateTheme/index.js.map +0 -1
  366. package/bin/keycloakify/generateTheme/readExtraPageNames.js.map +0 -1
  367. package/bin/keycloakify/generateTheme/readFieldNameUsage.js.map +0 -1
  368. package/bin/promptKeycloakVersion.d.ts +0 -3
  369. package/bin/promptKeycloakVersion.js.map +0 -1
  370. package/src/bin/keycloakify/buildOptions/UserProvidedBuildOptions.ts +0 -21
  371. package/src/bin/keycloakify/buildOptions/getCacheDirPath.ts +0 -25
  372. package/src/bin/keycloakify/buildOptions/getReactAppRootDirPath.ts +0 -23
  373. package/src/bin/keycloakify/buildOptions/index.ts +0 -1
  374. package/src/bin/keycloakify/buildOptions/parsedPackageJson.ts +0 -32
  375. package/src/bin/keycloakify/buildOptions/resolvedViteConfig.ts +0 -74
  376. package/src/bin/keycloakify/generateTheme/generateTheme.ts +0 -44
  377. package/src/bin/keycloakify/generateTheme/index.ts +0 -1
  378. package/src/bin/promptKeycloakVersion.ts +0 -49
  379. /package/bin/keycloakify/{generateTheme → generateSrcMainResources}/generateMessageProperties.js +0 -0
  380. /package/bin/{downloadAndUnzip.d.ts → shared/downloadAndUnzip.d.ts} +0 -0
  381. /package/bin/{getThemeSrcDirPath.d.ts → shared/getThemeSrcDirPath.d.ts} +0 -0
  382. /package/bin/{keycloakify/buildOptions → tools}/getNpmWorkspaceRootDirPath.d.ts +0 -0
@@ -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,8 +1,8 @@
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";
5
- import { accountV1ThemeName } from "../constants";
4
+ import type { BuildOptions } from "../shared/buildOptions";
5
+ import { accountV1ThemeName } from "../shared/constants";
6
6
 
7
7
  export type BuildOptionsLike = {
8
8
  keycloakifyBuildDirPath: string;
@@ -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,21 @@
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";
5
+ import { readBuildOptions } from "../shared/buildOptions";
7
6
  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";
7
+ import { vitePluginSubScriptEnvNames } from "../shared/constants";
12
8
  import { buildJars } from "./buildJars";
9
+ import type { CliCommandOptions } from "../main";
13
10
 
14
- export async function main() {
15
- const buildOptions = readBuildOptions({
16
- "processArgv": process.argv.slice(2)
17
- });
11
+ export async function command(params: { cliCommandOptions: CliCommandOptions }) {
12
+ const { cliCommandOptions } = params;
13
+
14
+ const buildOptions = readBuildOptions({ cliCommandOptions });
18
15
 
19
16
  const logger = getLogger({ "isSilent": buildOptions.isSilent });
20
- logger.log("🔏 Building the keycloak theme...⌚");
21
17
 
22
- const { themeSrcDirPath } = getThemeSrcDirPath({ "reactAppRootDirPath": buildOptions.reactAppRootDirPath });
18
+ logger.log("🔏 Building the keycloak theme...⌚");
23
19
 
24
20
  {
25
21
  if (!fs.existsSync(buildOptions.keycloakifyBuildDirPath)) {
@@ -29,12 +25,7 @@ export async function main() {
29
25
  fs.writeFileSync(pathJoin(buildOptions.keycloakifyBuildDirPath, ".gitignore"), Buffer.from("*", "utf8"));
30
26
  }
31
27
 
32
- const { doesImplementAccountTheme } = await generateTheme({
33
- themeSrcDirPath,
34
- "keycloakifySrcDirPath": pathJoin(getThisCodebaseRootDirPath(), "src"),
35
- "keycloakifyVersion": readThisNpmProjectVersion(),
36
- buildOptions
37
- });
28
+ await generateSrcMainResources({ buildOptions });
38
29
 
39
30
  run_post_build_script: {
40
31
  if (buildOptions.bundler !== "vite") {
@@ -45,56 +36,17 @@ export async function main() {
45
36
  "cwd": buildOptions.reactAppRootDirPath,
46
37
  "env": {
47
38
  ...process.env,
48
- [keycloakifyBuildOptionsForPostPostBuildScriptEnvName]: JSON.stringify(buildOptions)
39
+ [vitePluginSubScriptEnvNames.runPostBuildScript]: JSON.stringify(buildOptions)
49
40
  }
50
41
  });
51
42
  }
52
43
 
53
- const { lastJarFileBasename } = await buildJars({
54
- doesImplementAccountTheme,
55
- buildOptions
56
- });
57
-
58
- generateStartKeycloakTestingContainer({
59
- "jarFilePath": pathJoin(buildOptions.keycloakifyBuildDirPath, lastJarFileBasename),
60
- doesImplementAccountTheme,
61
- buildOptions
62
- });
44
+ await buildJars({ buildOptions });
63
45
 
64
46
  logger.log(
65
- [
66
- `✅ Your keycloak theme has been generated and bundled into .${pathSep}${pathJoin(
67
- pathRelative(buildOptions.reactAppRootDirPath, buildOptions.keycloakifyBuildDirPath),
68
- "keycloak-theme-for-kc-*.jar"
69
- )}`,
70
- "",
71
- `To test your theme locally you can spin up a Keycloak container image with the theme pre loaded by running:`,
72
- "",
73
- `👉 $ .${pathSep}${pathRelative(
74
- buildOptions.reactAppRootDirPath,
75
- pathJoin(buildOptions.keycloakifyBuildDirPath, generateStartKeycloakTestingContainer.basename)
76
- )} 👈`,
77
- ``,
78
- `Once your container is up and running: `,
79
- "- Log into the admin console 👉 http://localhost:8080/admin username: admin, password: admin 👈",
80
- `- Create a realm: Master -> AddRealm -> Name: myrealm`,
81
- `- Enable registration: Realm settings -> Login tab -> User registration: on`,
82
- `- Enable the Account theme (optional): Realm settings -> Themes tab -> Account theme: ${buildOptions.themeNames[0]}`,
83
- ` Clients -> account -> Login theme: ${buildOptions.themeNames[0]}`,
84
- `- 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)`,
85
- `- Create a client Clients -> Create -> Client ID: myclient`,
86
- ` Root URL: https://www.keycloak.org/app/`,
87
- ` Valid redirect URIs: https://www.keycloak.org/app* http://localhost* (localhost is optional)`,
88
- ` Valid post logout redirect URIs: https://www.keycloak.org/app* http://localhost*`,
89
- ` Web origins: *`,
90
- ` Login Theme: ${buildOptions.themeNames[0]}`,
91
- ` Save (button at the bottom of the page)`,
92
- ``,
93
- `- Go to 👉 https://www.keycloak.org/app/ 👈 Click "Save" then "Sign in". You should see your login page`,
94
- `- Got to 👉 http://localhost:8080/realms/myrealm/account 👈 to see your account theme`,
95
- ``,
96
- `Video tutorial: https://youtu.be/WMyGZNHQkjU`,
97
- ``
98
- ].join("\n")
47
+ `✅ Your keycloak theme has been generated and bundled into .${pathSep}${pathJoin(
48
+ pathRelative(process.cwd(), buildOptions.keycloakifyBuildDirPath),
49
+ "keycloak-theme-for-kc-*.jar"
50
+ )}`
99
51
  );
100
52
  }
@@ -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
 
@@ -0,0 +1,111 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { termost } from "termost";
4
+ import * as child_process from "child_process";
5
+
6
+ export type CliCommandOptions = {
7
+ isSilent: boolean;
8
+ reactAppRootDirPath: string | undefined;
9
+ };
10
+
11
+ const program = termost<CliCommandOptions>("Keycloak theme builder");
12
+
13
+ program
14
+ .option({
15
+ "key": "reactAppRootDirPath",
16
+ "name": { "long": "project", "short": "p" },
17
+ "description": "https://docs.keycloakify.dev/build-options#project-or-p-cli-option",
18
+ "defaultValue": undefined
19
+ })
20
+ .option({
21
+ "key": "isSilent",
22
+ "name": "silent",
23
+ "description": "https://docs.keycloakify.dev/build-options#silent",
24
+ "defaultValue": false
25
+ });
26
+
27
+ program
28
+ .command({
29
+ "name": "build",
30
+ "description": "Build the theme (default subcommand)."
31
+ })
32
+ .task({
33
+ "handler": async cliCommandOptions => {
34
+ const { command } = await import("./keycloakify");
35
+ return command({ cliCommandOptions });
36
+ }
37
+ });
38
+
39
+ program
40
+ .command({
41
+ "name": "download-builtin-keycloak-theme",
42
+ "description": "Download the built-in Keycloak theme."
43
+ })
44
+ .task({
45
+ "handler": async cliCommandOptions => {
46
+ const { command } = await import("./download-builtin-keycloak-theme");
47
+ return command({ cliCommandOptions });
48
+ }
49
+ });
50
+
51
+ program
52
+ .command({
53
+ "name": "eject-keycloak-page",
54
+ "description": "Eject a Keycloak page."
55
+ })
56
+ .task({
57
+ "handler": async cliCommandOptions => {
58
+ const { command } = await import("./eject-keycloak-page");
59
+ return command({ cliCommandOptions });
60
+ }
61
+ });
62
+
63
+ program
64
+ .command({
65
+ "name": "initialize-email-theme",
66
+ "description": "Initialize an email theme."
67
+ })
68
+ .task({
69
+ "handler": async cliCommandOptions => {
70
+ const { command } = await import("./initialize-email-theme");
71
+ return command({ cliCommandOptions });
72
+ }
73
+ });
74
+
75
+ program
76
+ .command({
77
+ "name": "copy-keycloak-resources-to-public",
78
+ "description": [
79
+ "Copy Keycloak default theme resources to the public directory.",
80
+ "This command is meant to be explicitly used in Webpack projects only."
81
+ ].join(" ")
82
+ })
83
+ .task({
84
+ "handler": async cliCommandOptions => {
85
+ const { command } = await import("./copy-keycloak-resources-to-public");
86
+ return command({ cliCommandOptions });
87
+ }
88
+ });
89
+
90
+ program
91
+ .command({
92
+ "name": "start-keycloak-container",
93
+ "description": "Spin up a Keycloak container with the theme preloaded and the realm pre configured."
94
+ })
95
+ .task({
96
+ "handler": async cliCommandOptions => {
97
+ const { command } = await import("./start-keycloak-container");
98
+ return command({ cliCommandOptions });
99
+ }
100
+ });
101
+
102
+ // Fallback to build command if no command is provided
103
+ {
104
+ const [, , ...rest] = process.argv;
105
+
106
+ if (rest.length === 0 || !rest[0].startsWith("-")) {
107
+ child_process.spawnSync("npx", ["keycloakify", "build", ...rest], {
108
+ "stdio": "inherit"
109
+ });
110
+ }
111
+ }
@@ -0,0 +1,7 @@
1
+ export type KeycloakVersionRange = KeycloakVersionRange.WithAccountTheme | KeycloakVersionRange.WithoutAccountTheme;
2
+
3
+ export namespace KeycloakVersionRange {
4
+ export type WithoutAccountTheme = "21-and-below" | "22-and-above";
5
+
6
+ export type WithAccountTheme = "21-and-below" | "23" | "24-and-above";
7
+ }
@@ -1,13 +1,13 @@
1
1
  import { parse as urlParse } from "url";
2
- import { readParsedPackageJson } from "./parsedPackageJson";
3
2
  import { join as pathJoin } from "path";
4
- import parseArgv from "minimist";
5
- import { getAbsoluteAndInOsFormatPath } from "../../tools/getAbsoluteAndInOsFormatPath";
6
- import { readResolvedViteConfig } from "./resolvedViteConfig";
3
+ import { getAbsoluteAndInOsFormatPath } from "../tools/getAbsoluteAndInOsFormatPath";
4
+ import { getNpmWorkspaceRootDirPath } from "../tools/getNpmWorkspaceRootDirPath";
5
+ import type { CliCommandOptions } from "../main";
6
+ import { z } from "zod";
7
7
  import * as fs from "fs";
8
- import { getCacheDirPath } from "./getCacheDirPath";
9
- import { getReactAppRootDirPath } from "./getReactAppRootDirPath";
10
- import { getNpmWorkspaceRootDirPath } from "./getNpmWorkspaceRootDirPath";
8
+ import { assert } from "tsafe";
9
+ import * as child_process from "child_process";
10
+ import { vitePluginSubScriptEnvNames } from "./constants";
11
11
 
12
12
  /** Consolidated build option gathered form CLI arguments and config in package.json */
13
13
  export type BuildOptions = {
@@ -20,6 +20,7 @@ export type BuildOptions = {
20
20
  artifactId: string;
21
21
  loginThemeResourcesFromKeycloakVersion: string;
22
22
  reactAppRootDirPath: string;
23
+ // TODO: Remove from vite type
23
24
  reactAppBuildDirPath: string;
24
25
  /** Directory that keycloakify outputs to. Defaults to {cwd}/build_keycloak */
25
26
  keycloakifyBuildDirPath: string;
@@ -32,23 +33,98 @@ export type BuildOptions = {
32
33
  npmWorkspaceRootDirPath: string;
33
34
  };
34
35
 
35
- export function readBuildOptions(params: { processArgv: string[] }): BuildOptions {
36
- const { processArgv } = params;
36
+ export type UserProvidedBuildOptions = {
37
+ extraThemeProperties?: string[];
38
+ artifactId?: string;
39
+ groupId?: string;
40
+ loginThemeResourcesFromKeycloakVersion?: string;
41
+ keycloakifyBuildDirPath?: string;
42
+ themeName?: string | string[];
43
+ };
44
+
45
+ export type ResolvedViteConfig = {
46
+ buildDir: string;
47
+ publicDir: string;
48
+ assetsDir: string;
49
+ urlPathname: string | undefined;
50
+ userProvidedBuildOptions: UserProvidedBuildOptions;
51
+ };
52
+
53
+ export function readBuildOptions(params: { cliCommandOptions: CliCommandOptions }): BuildOptions {
54
+ const { cliCommandOptions } = params;
55
+
56
+ const reactAppRootDirPath = (() => {
57
+ if (cliCommandOptions.reactAppRootDirPath === undefined) {
58
+ return process.cwd();
59
+ }
60
+
61
+ return getAbsoluteAndInOsFormatPath({
62
+ "pathIsh": cliCommandOptions.reactAppRootDirPath,
63
+ "cwd": process.cwd()
64
+ });
65
+ })();
66
+
67
+ const { resolvedViteConfig } = (() => {
68
+ if (fs.readdirSync(reactAppRootDirPath).find(fileBasename => fileBasename.startsWith("vite.config")) === undefined) {
69
+ return { "resolvedViteConfig": undefined };
70
+ }
71
+
72
+ const output = child_process
73
+ .execSync("npx vite", {
74
+ "cwd": reactAppRootDirPath,
75
+ "env": {
76
+ ...process.env,
77
+ [vitePluginSubScriptEnvNames.resolveViteConfig]: "true"
78
+ }
79
+ })
80
+ .toString("utf8");
81
+
82
+ assert(output.includes(vitePluginSubScriptEnvNames.resolveViteConfig), "Seems like the Keycloakify's Vite plugin is not installed.");
83
+
84
+ const resolvedViteConfigStr = output.split(vitePluginSubScriptEnvNames.resolveViteConfig).reverse()[0];
37
85
 
38
- const { reactAppRootDirPath } = getReactAppRootDirPath({ processArgv });
86
+ const resolvedViteConfig: ResolvedViteConfig = JSON.parse(resolvedViteConfigStr);
39
87
 
40
- const { cacheDirPath } = getCacheDirPath({ reactAppRootDirPath });
88
+ return { resolvedViteConfig };
89
+ })();
90
+
91
+ const parsedPackageJson = (() => {
92
+ type ParsedPackageJson = {
93
+ name: string;
94
+ version?: string;
95
+ homepage?: string;
96
+ keycloakify?: UserProvidedBuildOptions & { reactAppBuildDirPath?: string };
97
+ };
41
98
 
42
- const { resolvedViteConfig } = readResolvedViteConfig({ cacheDirPath });
99
+ const zParsedPackageJson = z.object({
100
+ "name": z.string(),
101
+ "version": z.string().optional(),
102
+ "homepage": z.string().optional(),
103
+ "keycloakify": z
104
+ .object({
105
+ "extraThemeProperties": z.array(z.string()).optional(),
106
+ "artifactId": z.string().optional(),
107
+ "groupId": z.string().optional(),
108
+ "loginThemeResourcesFromKeycloakVersion": z.string().optional(),
109
+ "reactAppBuildDirPath": z.string().optional(),
110
+ "keycloakifyBuildDirPath": z.string().optional(),
111
+ "themeName": z.union([z.string(), z.array(z.string())]).optional()
112
+ })
113
+ .optional()
114
+ });
43
115
 
44
- if (resolvedViteConfig === undefined && fs.existsSync(pathJoin(reactAppRootDirPath, "vite.config.ts"))) {
45
- throw new Error("Keycloakify's Vite plugin output not found");
46
- }
116
+ {
117
+ type Got = ReturnType<(typeof zParsedPackageJson)["parse"]>;
118
+ type Expected = ParsedPackageJson;
119
+ assert<Got extends Expected ? true : false>();
120
+ assert<Expected extends Got ? true : false>();
121
+ }
47
122
 
48
- const { keycloakify: userProvidedBuildOptionsFromPackageJson, ...parsedPackageJson } = readParsedPackageJson({ reactAppRootDirPath });
123
+ return zParsedPackageJson.parse(JSON.parse(fs.readFileSync(pathJoin(reactAppRootDirPath, "package.json")).toString("utf8")));
124
+ })();
49
125
 
50
- const userProvidedBuildOptions = {
51
- ...userProvidedBuildOptionsFromPackageJson,
126
+ const userProvidedBuildOptions: UserProvidedBuildOptions = {
127
+ ...parsedPackageJson.keycloakify,
52
128
  ...resolvedViteConfig?.userProvidedBuildOptions
53
129
  };
54
130
 
@@ -75,9 +151,9 @@ export function readBuildOptions(params: { processArgv: string[] }): BuildOption
75
151
  break webpack;
76
152
  }
77
153
 
78
- if (userProvidedBuildOptions.reactAppBuildDirPath !== undefined) {
154
+ if (parsedPackageJson.keycloakify?.reactAppBuildDirPath !== undefined) {
79
155
  return getAbsoluteAndInOsFormatPath({
80
- "pathIsh": userProvidedBuildOptions.reactAppBuildDirPath,
156
+ "pathIsh": parsedPackageJson.keycloakify.reactAppBuildDirPath,
81
157
  "cwd": reactAppRootDirPath
82
158
  });
83
159
  }
@@ -88,13 +164,11 @@ export function readBuildOptions(params: { processArgv: string[] }): BuildOption
88
164
  return pathJoin(reactAppRootDirPath, resolvedViteConfig.buildDir);
89
165
  })();
90
166
 
91
- const argv = parseArgv(processArgv);
92
-
93
167
  const { npmWorkspaceRootDirPath } = getNpmWorkspaceRootDirPath({ reactAppRootDirPath });
94
168
 
95
169
  return {
96
170
  "bundler": resolvedViteConfig !== undefined ? "vite" : "webpack",
97
- "isSilent": typeof argv["silent"] === "boolean" ? argv["silent"] : false,
171
+ "isSilent": cliCommandOptions.isSilent,
98
172
  "themeVersion": process.env.KEYCLOAKIFY_THEME_VERSION ?? parsedPackageJson.version ?? "0.0.0",
99
173
  themeNames,
100
174
  "extraThemeProperties": userProvidedBuildOptions.extraThemeProperties,
@@ -148,7 +222,23 @@ export function readBuildOptions(params: { processArgv: string[] }): BuildOption
148
222
 
149
223
  return pathJoin(reactAppRootDirPath, resolvedViteConfig.publicDir);
150
224
  })(),
151
- cacheDirPath,
225
+ "cacheDirPath": (() => {
226
+ const cacheDirPath = pathJoin(
227
+ (() => {
228
+ if (process.env.XDG_CACHE_HOME !== undefined) {
229
+ return getAbsoluteAndInOsFormatPath({
230
+ "pathIsh": process.env.XDG_CACHE_HOME,
231
+ "cwd": reactAppRootDirPath
232
+ });
233
+ }
234
+
235
+ return pathJoin(npmWorkspaceRootDirPath, "node_modules", ".cache");
236
+ })(),
237
+ "keycloakify"
238
+ );
239
+
240
+ return cacheDirPath;
241
+ })(),
152
242
  "urlPathname": (() => {
153
243
  webpack: {
154
244
  if (resolvedViteConfig !== undefined) {
@@ -2,7 +2,6 @@ export const nameOfTheGlobal = "kcContext";
2
2
  export const keycloak_resources = "keycloak-resources";
3
3
  export const resources_common = "resources-common";
4
4
  export const lastKeycloakVersionWithAccountV1 = "21.1.2";
5
- export const resolvedViteConfigJsonBasename = "vite.json";
6
5
  export const basenameOfTheKeycloakifyResourcesDir = "build";
7
6
 
8
7
  export const themeTypes = ["login", "account"] as const;
@@ -10,4 +9,7 @@ export const accountV1ThemeName = "account-v1";
10
9
 
11
10
  export type ThemeType = (typeof themeTypes)[number];
12
11
 
13
- export const keycloakifyBuildOptionsForPostPostBuildScriptEnvName = "KEYCLOAKIFY_BUILD_OPTIONS_POST_POST_BUILD_SCRIPT";
12
+ export const vitePluginSubScriptEnvNames = {
13
+ "runPostBuildScript": "KEYCLOAKIFY_RUN_POST_BUILD_SCRIPT",
14
+ "resolveViteConfig": "KEYCLOAKIFY_RESOLVE_VITE_CONFIG"
15
+ } as const;
@@ -0,0 +1,87 @@
1
+ import {
2
+ downloadKeycloakStaticResources,
3
+ type BuildOptionsLike as BuildOptionsLike_downloadKeycloakStaticResources
4
+ } from "./downloadKeycloakStaticResources";
5
+ import { join as pathJoin, relative as pathRelative } from "path";
6
+ import { themeTypes, keycloak_resources, lastKeycloakVersionWithAccountV1 } from "../shared/constants";
7
+ import { readThisNpmProjectVersion } from "../tools/readThisNpmProjectVersion";
8
+ import { assert } from "tsafe/assert";
9
+ import * as fs from "fs";
10
+ import { rmSync } from "../tools/fs.rmSync";
11
+ import type { BuildOptions } from "./buildOptions";
12
+
13
+ export type BuildOptionsLike = BuildOptionsLike_downloadKeycloakStaticResources & {
14
+ loginThemeResourcesFromKeycloakVersion: string;
15
+ publicDirPath: string;
16
+ };
17
+
18
+ assert<BuildOptions extends BuildOptionsLike ? true : false>();
19
+
20
+ export async function copyKeycloakResourcesToPublic(params: { buildOptions: BuildOptionsLike }) {
21
+ const { buildOptions } = params;
22
+
23
+ const destDirPath = pathJoin(buildOptions.publicDirPath, keycloak_resources);
24
+
25
+ const keycloakifyBuildinfoFilePath = pathJoin(destDirPath, "keycloakify.buildinfo");
26
+
27
+ const keycloakifyBuildinfoRaw = JSON.stringify(
28
+ {
29
+ destDirPath,
30
+ "keycloakifyVersion": readThisNpmProjectVersion(),
31
+ "buildOptions": {
32
+ "loginThemeResourcesFromKeycloakVersion": readThisNpmProjectVersion(),
33
+ "cacheDirPath": pathRelative(destDirPath, buildOptions.cacheDirPath),
34
+ "npmWorkspaceRootDirPath": pathRelative(destDirPath, buildOptions.npmWorkspaceRootDirPath)
35
+ }
36
+ },
37
+ null,
38
+ 2
39
+ );
40
+
41
+ skip_if_already_done: {
42
+ if (!fs.existsSync(keycloakifyBuildinfoFilePath)) {
43
+ break skip_if_already_done;
44
+ }
45
+
46
+ const keycloakifyBuildinfoRaw_previousRun = fs.readFileSync(keycloakifyBuildinfoFilePath).toString("utf8");
47
+
48
+ if (keycloakifyBuildinfoRaw_previousRun !== keycloakifyBuildinfoRaw) {
49
+ break skip_if_already_done;
50
+ }
51
+
52
+ return;
53
+ }
54
+
55
+ rmSync(destDirPath, { "force": true, "recursive": true });
56
+
57
+ for (const themeType of themeTypes) {
58
+ await downloadKeycloakStaticResources({
59
+ "keycloakVersion": (() => {
60
+ switch (themeType) {
61
+ case "login":
62
+ return buildOptions.loginThemeResourcesFromKeycloakVersion;
63
+ case "account":
64
+ return lastKeycloakVersionWithAccountV1;
65
+ }
66
+ })(),
67
+ themeType,
68
+ "themeDirPath": destDirPath,
69
+ buildOptions
70
+ });
71
+ }
72
+
73
+ fs.writeFileSync(
74
+ pathJoin(destDirPath, "README.txt"),
75
+ Buffer.from(
76
+ // prettier-ignore
77
+ [
78
+ "This is just a test folder that helps develop",
79
+ "the login and register page without having to run a Keycloak container"
80
+ ].join(" ")
81
+ )
82
+ );
83
+
84
+ fs.writeFileSync(pathJoin(buildOptions.publicDirPath, keycloak_resources, ".gitignore"), Buffer.from("*", "utf8"));
85
+
86
+ fs.writeFileSync(keycloakifyBuildinfoFilePath, Buffer.from(keycloakifyBuildinfoRaw, "utf8"));
87
+ }
@@ -3,13 +3,13 @@ import { mkdir, writeFile, unlink } from "fs/promises";
3
3
  import fetch from "make-fetch-happen";
4
4
  import { dirname as pathDirname, join as pathJoin, basename as pathBasename } from "path";
5
5
  import { assert } from "tsafe/assert";
6
- import { transformCodebase } from "./tools/transformCodebase";
7
- import { unzip, zip } from "./tools/unzip";
8
- import { rm } from "./tools/fs.rm";
6
+ import { transformCodebase } from "../tools/transformCodebase";
7
+ import { unzip, zip } from "../tools/unzip";
8
+ import { rm } from "../tools/fs.rm";
9
9
  import * as child_process from "child_process";
10
- import { existsAsync } from "./tools/fs.existsAsync";
11
- import type { BuildOptions } from "./keycloakify/buildOptions";
12
- import { getProxyFetchOptions } from "./tools/fetchProxyOptions";
10
+ import { existsAsync } from "../tools/fs.existsAsync";
11
+ import type { BuildOptions } from "./buildOptions";
12
+ import { getProxyFetchOptions } from "../tools/fetchProxyOptions";
13
13
 
14
14
  export type BuildOptionsLike = {
15
15
  cacheDirPath: string;