keycloakify 10.0.0-rc.2 → 10.0.0-rc.20

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 (567) 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 +7 -7
  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 +38 -31
  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 +20 -15
  16. package/account/kcContext/createGetKcContext.js.map +1 -1
  17. package/account/kcContext/getKcContext.js.map +1 -1
  18. package/account/kcContext/getKcContextFromWindow.d.ts +3 -1
  19. package/account/kcContext/getKcContextFromWindow.js +1 -1
  20. package/account/kcContext/getKcContextFromWindow.js.map +1 -1
  21. package/account/kcContext/kcContextMocks.js +155 -143
  22. package/account/kcContext/kcContextMocks.js.map +1 -1
  23. package/account/lib/useGetClassName.js +14 -14
  24. package/account/lib/useGetClassName.js.map +1 -1
  25. package/account/pages/Account.js +2 -2
  26. package/account/pages/Account.js.map +1 -1
  27. package/account/pages/Applications.js +3 -3
  28. package/account/pages/Applications.js.map +1 -1
  29. package/account/pages/FederatedIdentity.d.ts +7 -0
  30. package/account/pages/FederatedIdentity.js +8 -0
  31. package/account/pages/FederatedIdentity.js.map +1 -0
  32. package/account/pages/Log.js +2 -2
  33. package/account/pages/Log.js.map +1 -1
  34. package/account/pages/Password.js +9 -11
  35. package/account/pages/Password.js.map +1 -1
  36. package/account/pages/Sessions.js +1 -5
  37. package/account/pages/Sessions.js.map +1 -1
  38. package/account/pages/Totp.js +5 -5
  39. package/account/pages/Totp.js.map +1 -1
  40. package/bin/246.index.js +466 -0
  41. package/bin/420.index.js +508 -0
  42. package/bin/509.index.js +438 -0
  43. package/bin/772.index.js +1524 -0
  44. package/bin/main.js +155612 -0
  45. package/bin/{keycloakify/generateFtl/pageId.d.ts → shared/constants.d.ts} +16 -1
  46. package/bin/shared/constants.js +63 -0
  47. package/bin/shared/constants.js.map +1 -0
  48. package/lib/BASE_URL.js.map +1 -1
  49. package/lib/isStorybook.js +2 -1
  50. package/lib/isStorybook.js.map +1 -1
  51. package/lib/useGetClassName.js.map +1 -1
  52. package/login/Fallback.js.map +1 -1
  53. package/login/Template.js +17 -17
  54. package/login/Template.js.map +1 -1
  55. package/login/UserProfileFormFields.js +59 -59
  56. package/login/UserProfileFormFields.js.map +1 -1
  57. package/login/i18n/baseMessages/ca.d.ts +1 -1
  58. package/login/i18n/baseMessages/ca.js +1 -1
  59. package/login/i18n/baseMessages/el.d.ts +0 -1
  60. package/login/i18n/baseMessages/el.js +0 -1
  61. package/login/i18n/baseMessages/el.js.map +1 -1
  62. package/login/i18n/baseMessages/en.d.ts +1 -1
  63. package/login/i18n/baseMessages/en.js +1 -1
  64. package/login/i18n/baseMessages/es.d.ts +1 -1
  65. package/login/i18n/baseMessages/es.js +1 -1
  66. package/login/i18n/baseMessages/fa.d.ts +0 -1
  67. package/login/i18n/baseMessages/fa.js +0 -1
  68. package/login/i18n/baseMessages/fa.js.map +1 -1
  69. package/login/i18n/baseMessages/hu.d.ts +1 -1
  70. package/login/i18n/baseMessages/hu.js +1 -1
  71. package/login/i18n/baseMessages/index.d.ts +1 -2
  72. package/login/i18n/baseMessages/index.js.map +1 -1
  73. package/login/i18n/baseMessages/zh-CN.d.ts +1 -1
  74. package/login/i18n/baseMessages/zh-CN.js +1 -1
  75. package/login/i18n/i18n.d.ts +5 -5
  76. package/login/i18n/i18n.js +59 -41
  77. package/login/i18n/i18n.js.map +1 -1
  78. package/login/index.d.ts +1 -1
  79. package/login/kcContext/KcContext.d.ts +1 -0
  80. package/login/kcContext/KcContext.js +1 -0
  81. package/login/kcContext/KcContext.js.map +1 -1
  82. package/login/kcContext/createGetKcContext.d.ts +3 -3
  83. package/login/kcContext/createGetKcContext.js +30 -22
  84. package/login/kcContext/createGetKcContext.js.map +1 -1
  85. package/login/kcContext/getKcContext.js.map +1 -1
  86. package/login/kcContext/getKcContextFromWindow.d.ts +3 -1
  87. package/login/kcContext/getKcContextFromWindow.js +1 -1
  88. package/login/kcContext/getKcContextFromWindow.js.map +1 -1
  89. package/login/kcContext/kcContextMocks.js +235 -232
  90. package/login/kcContext/kcContextMocks.js.map +1 -1
  91. package/login/lib/useDownloadTerms.js +5 -6
  92. package/login/lib/useDownloadTerms.js.map +1 -1
  93. package/login/lib/useGetClassName.js +112 -112
  94. package/login/lib/useGetClassName.js.map +1 -1
  95. package/login/lib/useUserProfileForm.js +188 -188
  96. package/login/lib/useUserProfileForm.js.map +1 -1
  97. package/login/pages/Code.js +1 -1
  98. package/login/pages/Code.js.map +1 -1
  99. package/login/pages/DeleteAccountConfirm.js +5 -1
  100. package/login/pages/DeleteAccountConfirm.js.map +1 -1
  101. package/login/pages/DeleteCredential.js +1 -1
  102. package/login/pages/DeleteCredential.js.map +1 -1
  103. package/login/pages/Error.js +1 -1
  104. package/login/pages/Error.js.map +1 -1
  105. package/login/pages/FrontchannelLogout.js +1 -1
  106. package/login/pages/FrontchannelLogout.js.map +1 -1
  107. package/login/pages/IdpReviewUserProfile.js +1 -1
  108. package/login/pages/IdpReviewUserProfile.js.map +1 -1
  109. package/login/pages/Info.js +5 -5
  110. package/login/pages/Info.js.map +1 -1
  111. package/login/pages/Login.js +4 -4
  112. package/login/pages/Login.js.map +1 -1
  113. package/login/pages/LoginConfigTotp.js +2 -2
  114. package/login/pages/LoginConfigTotp.js.map +1 -1
  115. package/login/pages/LoginIdpLinkConfirm.js +1 -1
  116. package/login/pages/LoginIdpLinkConfirm.js.map +1 -1
  117. package/login/pages/LoginIdpLinkEmail.js +1 -1
  118. package/login/pages/LoginIdpLinkEmail.js.map +1 -1
  119. package/login/pages/LoginOauth2DeviceVerifyUserCode.js +1 -1
  120. package/login/pages/LoginOauth2DeviceVerifyUserCode.js.map +1 -1
  121. package/login/pages/LoginOauthGrant.js +2 -2
  122. package/login/pages/LoginOauthGrant.js.map +1 -1
  123. package/login/pages/LoginOtp.js +1 -1
  124. package/login/pages/LoginOtp.js.map +1 -1
  125. package/login/pages/LoginPageExpired.js +1 -1
  126. package/login/pages/LoginPageExpired.js.map +1 -1
  127. package/login/pages/LoginPassword.js +3 -3
  128. package/login/pages/LoginPassword.js.map +1 -1
  129. package/login/pages/LoginRecoveryAuthnCodeConfig.js +6 -6
  130. package/login/pages/LoginRecoveryAuthnCodeConfig.js.map +1 -1
  131. package/login/pages/LoginRecoveryAuthnCodeInput.js +1 -1
  132. package/login/pages/LoginRecoveryAuthnCodeInput.js.map +1 -1
  133. package/login/pages/LoginResetOtp.js +1 -1
  134. package/login/pages/LoginResetOtp.js.map +1 -1
  135. package/login/pages/LoginResetPassword.js +2 -2
  136. package/login/pages/LoginResetPassword.js.map +1 -1
  137. package/login/pages/LoginUpdatePassword.js +3 -3
  138. package/login/pages/LoginUpdatePassword.js.map +1 -1
  139. package/login/pages/LoginUpdateProfile.js +2 -4
  140. package/login/pages/LoginUpdateProfile.js.map +1 -1
  141. package/login/pages/LoginUsername.js +3 -3
  142. package/login/pages/LoginUsername.js.map +1 -1
  143. package/login/pages/LoginVerifyEmail.js +1 -1
  144. package/login/pages/LoginVerifyEmail.js.map +1 -1
  145. package/login/pages/LoginX509Info.js +1 -1
  146. package/login/pages/LoginX509Info.js.map +1 -1
  147. package/login/pages/LogoutConfirm.js +1 -1
  148. package/login/pages/LogoutConfirm.js.map +1 -1
  149. package/login/pages/Register.js +4 -8
  150. package/login/pages/Register.js.map +1 -1
  151. package/login/pages/SamlPostForm.js +1 -1
  152. package/login/pages/SamlPostForm.js.map +1 -1
  153. package/login/pages/SelectAuthenticator.js +2 -2
  154. package/login/pages/SelectAuthenticator.js.map +1 -1
  155. package/login/pages/Terms.js +1 -1
  156. package/login/pages/Terms.js.map +1 -1
  157. package/login/pages/UpdateEmail.js +3 -5
  158. package/login/pages/UpdateEmail.js.map +1 -1
  159. package/login/pages/WebauthnAuthenticate.js +17 -14
  160. package/login/pages/WebauthnAuthenticate.js.map +1 -1
  161. package/login/pages/WebauthnError.js +2 -2
  162. package/login/pages/WebauthnError.js.map +1 -1
  163. package/login/pages/WebauthnRegister.js +10 -10
  164. package/login/pages/WebauthnRegister.js.map +1 -1
  165. package/package.json +103 -512
  166. package/src/PUBLIC_URL.ts +4 -1
  167. package/src/account/Fallback.tsx +3 -0
  168. package/src/account/Template.tsx +7 -10
  169. package/src/account/TemplateProps.ts +4 -1
  170. package/src/account/i18n/i18n.tsx +44 -37
  171. package/src/account/index.ts +1 -1
  172. package/src/account/kcContext/KcContext.ts +76 -63
  173. package/src/account/kcContext/createGetKcContext.ts +48 -22
  174. package/src/account/kcContext/getKcContext.ts +3 -1
  175. package/src/account/kcContext/getKcContextFromWindow.ts +7 -3
  176. package/src/account/kcContext/kcContextMocks.ts +172 -162
  177. package/src/account/lib/useGetClassName.ts +15 -14
  178. package/src/account/pages/Account.tsx +2 -2
  179. package/src/account/pages/Applications.tsx +2 -2
  180. package/src/account/pages/FederatedIdentity.tsx +58 -0
  181. package/src/account/pages/Log.tsx +1 -1
  182. package/src/account/pages/Password.tsx +8 -8
  183. package/src/account/pages/Sessions.tsx +0 -3
  184. package/src/account/pages/Totp.tsx +23 -26
  185. package/src/bin/copy-keycloak-resources-to-public.ts +10 -106
  186. package/src/bin/download-keycloak-default-theme.ts +63 -0
  187. package/src/bin/eject-page.ts +176 -0
  188. package/src/bin/initialize-email-theme.ts +38 -29
  189. package/src/bin/keycloakify/buildJars/buildJar.ts +192 -72
  190. package/src/bin/keycloakify/buildJars/buildJars.ts +41 -23
  191. package/src/bin/keycloakify/buildJars/extensionVersions.ts +2 -1
  192. package/src/bin/keycloakify/buildJars/generatePom.ts +12 -4
  193. package/src/bin/keycloakify/buildJars/getKeycloakVersionRangeForJar.ts +73 -21
  194. package/src/bin/keycloakify/generateFtl/ftl_object_to_js_code_declaring_an_object.ftl +182 -252
  195. package/src/bin/keycloakify/generateFtl/generateFtl.ts +59 -15
  196. package/src/bin/keycloakify/generateFtl/index.ts +0 -1
  197. package/src/bin/keycloakify/{generateTheme → generateSrcMainResources}/bringInAccountV1.ts +34 -22
  198. package/src/bin/keycloakify/{generateTheme → generateSrcMainResources}/generateMessageProperties.ts +72 -20
  199. package/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResources.ts +34 -0
  200. package/src/bin/keycloakify/{generateTheme/generateSrcMainResources.ts → generateSrcMainResources/generateSrcMainResourcesForMainTheme.ts} +113 -74
  201. package/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResourcesForThemeVariant.ts +80 -0
  202. package/src/bin/keycloakify/generateSrcMainResources/index.ts +1 -0
  203. package/src/bin/keycloakify/{generateTheme → generateSrcMainResources}/readExtraPageNames.ts +21 -8
  204. package/src/bin/keycloakify/generateSrcMainResources/readFieldNameUsage.ts +83 -0
  205. package/src/bin/keycloakify/generateStartKeycloakTestingContainer.ts +31 -18
  206. package/src/bin/keycloakify/index.ts +0 -7
  207. package/src/bin/keycloakify/keycloakify.ts +77 -69
  208. package/src/bin/keycloakify/replacers/replaceImportsInCssCode.ts +26 -7
  209. package/src/bin/keycloakify/replacers/replaceImportsInInlineCssCode.ts +8 -4
  210. package/src/bin/keycloakify/replacers/replaceImportsInJsCode/replaceImportsInJsCode.ts +7 -4
  211. package/src/bin/keycloakify/replacers/replaceImportsInJsCode/vite.ts +25 -7
  212. package/src/bin/keycloakify/replacers/replaceImportsInJsCode/webpack.ts +50 -12
  213. package/src/bin/main.ts +212 -0
  214. package/src/bin/shared/KeycloakVersionRange.ts +9 -0
  215. package/src/bin/shared/buildOptions.ts +307 -0
  216. package/src/bin/{keycloakify/generateFtl/pageId.ts → shared/constants.ts} +31 -1
  217. package/src/bin/shared/copyKeycloakResourcesToPublic.ts +104 -0
  218. package/src/bin/shared/downloadKeycloakDefaultTheme.ts +207 -0
  219. package/src/bin/shared/downloadKeycloakStaticResources.ts +53 -0
  220. package/src/bin/shared/getJarFileBasename.ts +11 -0
  221. package/src/bin/{getThemeSrcDirPath.ts → shared/getThemeSrcDirPath.ts} +6 -3
  222. package/src/bin/shared/metaInfKeycloakThemes.ts +61 -0
  223. package/src/bin/shared/promptKeycloakVersion.ts +125 -0
  224. package/src/bin/start-keycloak/appBuild.ts +129 -0
  225. package/src/bin/start-keycloak/index.ts +1 -0
  226. package/src/bin/start-keycloak/keycloakifyBuild.ts +41 -0
  227. package/src/bin/start-keycloak/myrealm-realm-23.json +2142 -0
  228. package/src/bin/start-keycloak/myrealm-realm-24.json +2318 -0
  229. package/src/bin/start-keycloak/start-keycloak.ts +467 -0
  230. package/src/bin/tools/SemVer.ts +32 -13
  231. package/src/bin/tools/String.prototype.replaceAll.ts +9 -2
  232. package/src/bin/tools/crawl.ts +4 -1
  233. package/src/bin/tools/crc32.ts +42 -24
  234. package/src/bin/tools/downloadAndExtractArchive/downloadAndExtractArchive.ts +262 -0
  235. package/src/bin/tools/downloadAndExtractArchive/fetchProxyOptions.ts +96 -0
  236. package/src/bin/tools/downloadAndExtractArchive/index.ts +1 -0
  237. package/src/bin/tools/extractArchive.ts +132 -0
  238. package/src/bin/tools/fetchProxyOptions.ts +31 -8
  239. package/src/bin/tools/fs.rmSync.ts +4 -4
  240. package/src/bin/tools/getAbsoluteAndInOsFormatPath.ts +17 -2
  241. package/src/bin/tools/getNpmWorkspaceRootDirPath.ts +73 -0
  242. package/src/bin/tools/octokit-addons/getLatestsSemVersionedTag.ts +8 -2
  243. package/src/bin/tools/octokit-addons/listTags.ts +15 -4
  244. package/src/bin/tools/partitionPromiseSettledResults.ts +12 -3
  245. package/src/bin/tools/{readThisNpmProjectVersion.ts → readThisNpmPackageVersion.ts} +6 -2
  246. package/src/bin/tools/transformCodebase.ts +29 -10
  247. package/src/bin/tools/trimIndent.ts +4 -1
  248. package/src/lib/isStorybook.ts +3 -1
  249. package/src/lib/useGetClassName.ts +12 -3
  250. package/src/login/Template.tsx +20 -36
  251. package/src/login/TemplateProps.ts +4 -1
  252. package/src/login/UserProfileFormFields.tsx +46 -47
  253. package/src/login/i18n/baseMessages/ca.ts +1 -1
  254. package/src/login/i18n/baseMessages/el.ts +0 -1
  255. package/src/login/i18n/baseMessages/en.ts +1 -1
  256. package/src/login/i18n/baseMessages/es.ts +1 -1
  257. package/src/login/i18n/baseMessages/fa.ts +0 -1
  258. package/src/login/i18n/baseMessages/hu.ts +1 -1
  259. package/src/login/i18n/baseMessages/zh-CN.ts +1 -1
  260. package/src/login/i18n/i18n.tsx +77 -54
  261. package/src/login/index.ts +1 -1
  262. package/src/login/kcContext/KcContext.ts +23 -4
  263. package/src/login/kcContext/createGetKcContext.ts +84 -37
  264. package/src/login/kcContext/getKcContext.ts +3 -1
  265. package/src/login/kcContext/getKcContextFromWindow.ts +7 -3
  266. package/src/login/kcContext/kcContextMocks.ts +340 -326
  267. package/src/login/lib/useDownloadTerms.ts +13 -9
  268. package/src/login/lib/useGetClassName.ts +119 -112
  269. package/src/login/lib/useUserProfileForm.tsx +227 -213
  270. package/src/login/pages/Code.tsx +1 -1
  271. package/src/login/pages/DeleteAccountConfirm.tsx +9 -3
  272. package/src/login/pages/FrontchannelLogout.tsx +1 -1
  273. package/src/login/pages/IdpReviewUserProfile.tsx +1 -1
  274. package/src/login/pages/Login.tsx +3 -3
  275. package/src/login/pages/LoginRecoveryAuthnCodeConfig.tsx +3 -3
  276. package/src/login/pages/LoginResetPassword.tsx +2 -2
  277. package/src/login/pages/LoginUpdateProfile.tsx +1 -1
  278. package/src/login/pages/LoginUsername.tsx +3 -3
  279. package/src/login/pages/Register.tsx +1 -1
  280. package/src/login/pages/UpdateEmail.tsx +1 -1
  281. package/src/login/pages/WebauthnAuthenticate.tsx +11 -8
  282. package/src/login/pages/WebauthnRegister.tsx +8 -8
  283. package/src/tools/AndByDiscriminatingKey.ts +12 -6
  284. package/src/tools/Array.prototype.every.ts +4 -1
  285. package/src/tools/LazyOrNot.ts +3 -1
  286. package/src/tools/StatefulObservable/README.md +16 -0
  287. package/src/tools/StatefulObservable/StatefulObservable.ts +58 -0
  288. package/src/tools/StatefulObservable/hooks/index.ts +2 -0
  289. package/src/tools/StatefulObservable/hooks/useObservable.ts +25 -0
  290. package/src/tools/StatefulObservable/hooks/useRerenderOnChange.ts +19 -0
  291. package/src/tools/StatefulObservable/index.ts +2 -0
  292. package/src/tools/clsx.ts +7 -1
  293. package/src/tools/deepAssign.ts +15 -8
  294. package/src/tools/deepClone.ts +3 -1
  295. package/src/tools/formatNumber.ts +4 -1
  296. package/src/tools/useConstCallback.ts +3 -1
  297. package/src/tools/useInsertLinkTags.ts +20 -7
  298. package/src/tools/useInsertScriptTags.ts +7 -2
  299. package/src/tools/useSetClassName.ts +4 -1
  300. package/src/vite-plugin/tsconfig.json +2 -1
  301. package/src/vite-plugin/vite-plugin.ts +64 -52
  302. package/tools/Array.prototype.every.js +2 -1
  303. package/tools/Array.prototype.every.js.map +1 -1
  304. package/tools/HTMLElement.prototype.prepend.js.map +1 -1
  305. package/tools/StatefulObservable/StatefulObservable.d.ts +8 -0
  306. package/tools/StatefulObservable/StatefulObservable.js +36 -0
  307. package/tools/StatefulObservable/StatefulObservable.js.map +1 -0
  308. package/tools/StatefulObservable/hooks/index.d.ts +2 -0
  309. package/tools/StatefulObservable/hooks/index.js +3 -0
  310. package/tools/StatefulObservable/hooks/index.js.map +1 -0
  311. package/tools/StatefulObservable/hooks/useObservable.d.ts +8 -0
  312. package/tools/StatefulObservable/hooks/useObservable.js +17 -0
  313. package/tools/StatefulObservable/hooks/useObservable.js.map +1 -0
  314. package/tools/StatefulObservable/hooks/useRerenderOnChange.d.ts +5 -0
  315. package/tools/StatefulObservable/hooks/useRerenderOnChange.js +14 -0
  316. package/tools/StatefulObservable/hooks/useRerenderOnChange.js.map +1 -0
  317. package/tools/StatefulObservable/index.d.ts +2 -0
  318. package/tools/StatefulObservable/index.js +3 -0
  319. package/tools/StatefulObservable/index.js.map +1 -0
  320. package/tools/clsx.js.map +1 -1
  321. package/tools/deepAssign.js +9 -7
  322. package/tools/deepAssign.js.map +1 -1
  323. package/tools/deepClone.js.map +1 -1
  324. package/tools/formatNumber.js.map +1 -1
  325. package/tools/memoize.js.map +1 -1
  326. package/tools/useConstCallback.js.map +1 -1
  327. package/tools/useInsertLinkTags.js +5 -4
  328. package/tools/useInsertLinkTags.js.map +1 -1
  329. package/tools/useInsertScriptTags.js +5 -2
  330. package/tools/useInsertScriptTags.js.map +1 -1
  331. package/tools/useSetClassName.js.map +1 -1
  332. package/vite-plugin/index.js +50234 -3
  333. package/bin/constants.d.ts +0 -10
  334. package/bin/constants.js +0 -13
  335. package/bin/constants.js.map +0 -1
  336. package/bin/copy-keycloak-resources-to-public.d.ts +0 -14
  337. package/bin/copy-keycloak-resources-to-public.js +0 -216
  338. package/bin/copy-keycloak-resources-to-public.js.map +0 -1
  339. package/bin/download-builtin-keycloak-theme.d.ts +0 -10
  340. package/bin/download-builtin-keycloak-theme.js +0 -352
  341. package/bin/download-builtin-keycloak-theme.js.map +0 -1
  342. package/bin/downloadAndUnzip.d.ts +0 -16
  343. package/bin/downloadAndUnzip.js +0 -255
  344. package/bin/downloadAndUnzip.js.map +0 -1
  345. package/bin/eject-keycloak-page.d.ts +0 -2
  346. package/bin/eject-keycloak-page.js +0 -132
  347. package/bin/eject-keycloak-page.js.map +0 -1
  348. package/bin/getThemeSrcDirPath.d.ts +0 -6
  349. package/bin/getThemeSrcDirPath.js +0 -123
  350. package/bin/getThemeSrcDirPath.js.map +0 -1
  351. package/bin/initialize-email-theme.d.ts +0 -2
  352. package/bin/initialize-email-theme.js +0 -121
  353. package/bin/initialize-email-theme.js.map +0 -1
  354. package/bin/keycloakify/buildJars/buildJar.d.ts +0 -14
  355. package/bin/keycloakify/buildJars/buildJar.js +0 -224
  356. package/bin/keycloakify/buildJars/buildJar.js.map +0 -1
  357. package/bin/keycloakify/buildJars/buildJars.d.ts +0 -10
  358. package/bin/keycloakify/buildJars/buildJars.js +0 -95
  359. package/bin/keycloakify/buildJars/buildJars.js.map +0 -1
  360. package/bin/keycloakify/buildJars/extensionVersions.d.ts +0 -12
  361. package/bin/keycloakify/buildJars/extensionVersions.js +0 -7
  362. package/bin/keycloakify/buildJars/extensionVersions.js.map +0 -1
  363. package/bin/keycloakify/buildJars/generatePom.d.ts +0 -13
  364. package/bin/keycloakify/buildJars/generatePom.js +0 -95
  365. package/bin/keycloakify/buildJars/generatePom.js.map +0 -1
  366. package/bin/keycloakify/buildJars/getKeycloakVersionRangeForJar.d.ts +0 -6
  367. package/bin/keycloakify/buildJars/getKeycloakVersionRangeForJar.js +0 -35
  368. package/bin/keycloakify/buildJars/getKeycloakVersionRangeForJar.js.map +0 -1
  369. package/bin/keycloakify/buildJars/index.d.ts +0 -1
  370. package/bin/keycloakify/buildJars/index.js +0 -18
  371. package/bin/keycloakify/buildJars/index.js.map +0 -1
  372. package/bin/keycloakify/buildOptions/UserProvidedBuildOptions.d.ts +0 -35
  373. package/bin/keycloakify/buildOptions/UserProvidedBuildOptions.js +0 -14
  374. package/bin/keycloakify/buildOptions/UserProvidedBuildOptions.js.map +0 -1
  375. package/bin/keycloakify/buildOptions/buildOptions.d.ts +0 -25
  376. package/bin/keycloakify/buildOptions/buildOptions.js +0 -178
  377. package/bin/keycloakify/buildOptions/buildOptions.js.map +0 -1
  378. package/bin/keycloakify/buildOptions/getCacheDirPath.d.ts +0 -5
  379. package/bin/keycloakify/buildOptions/getCacheDirPath.js +0 -22
  380. package/bin/keycloakify/buildOptions/getCacheDirPath.js.map +0 -1
  381. package/bin/keycloakify/buildOptions/getNpmWorkspaceRootDirPath.d.ts +0 -5
  382. package/bin/keycloakify/buildOptions/getNpmWorkspaceRootDirPath.js +0 -86
  383. package/bin/keycloakify/buildOptions/getNpmWorkspaceRootDirPath.js.map +0 -1
  384. package/bin/keycloakify/buildOptions/getReactAppRootDirPath.d.ts +0 -5
  385. package/bin/keycloakify/buildOptions/getReactAppRootDirPath.js +0 -26
  386. package/bin/keycloakify/buildOptions/getReactAppRootDirPath.js.map +0 -1
  387. package/bin/keycloakify/buildOptions/index.d.ts +0 -1
  388. package/bin/keycloakify/buildOptions/index.js +0 -18
  389. package/bin/keycloakify/buildOptions/index.js.map +0 -1
  390. package/bin/keycloakify/buildOptions/parsedPackageJson.d.ts +0 -10
  391. package/bin/keycloakify/buildOptions/parsedPackageJson.js +0 -49
  392. package/bin/keycloakify/buildOptions/parsedPackageJson.js.map +0 -1
  393. package/bin/keycloakify/buildOptions/resolvedViteConfig.d.ts +0 -13
  394. package/bin/keycloakify/buildOptions/resolvedViteConfig.js +0 -77
  395. package/bin/keycloakify/buildOptions/resolvedViteConfig.js.map +0 -1
  396. package/bin/keycloakify/generateFtl/ftl_object_to_js_code_declaring_an_object.ftl +0 -604
  397. package/bin/keycloakify/generateFtl/generateFtl.d.ts +0 -23
  398. package/bin/keycloakify/generateFtl/generateFtl.js +0 -169
  399. package/bin/keycloakify/generateFtl/generateFtl.js.map +0 -1
  400. package/bin/keycloakify/generateFtl/index.d.ts +0 -2
  401. package/bin/keycloakify/generateFtl/index.js +0 -19
  402. package/bin/keycloakify/generateFtl/index.js.map +0 -1
  403. package/bin/keycloakify/generateFtl/pageId.js +0 -41
  404. package/bin/keycloakify/generateFtl/pageId.js.map +0 -1
  405. package/bin/keycloakify/generateStartKeycloakTestingContainer.d.ts +0 -11
  406. package/bin/keycloakify/generateStartKeycloakTestingContainer.js +0 -89
  407. package/bin/keycloakify/generateStartKeycloakTestingContainer.js.map +0 -1
  408. package/bin/keycloakify/generateTheme/bringInAccountV1.d.ts +0 -9
  409. package/bin/keycloakify/generateTheme/bringInAccountV1.js +0 -153
  410. package/bin/keycloakify/generateTheme/bringInAccountV1.js.map +0 -1
  411. package/bin/keycloakify/generateTheme/downloadKeycloakStaticResources.d.ts +0 -11
  412. package/bin/keycloakify/generateTheme/downloadKeycloakStaticResources.js +0 -102
  413. package/bin/keycloakify/generateTheme/downloadKeycloakStaticResources.js.map +0 -1
  414. package/bin/keycloakify/generateTheme/generateMessageProperties.d.ts +0 -8
  415. package/bin/keycloakify/generateTheme/generateMessageProperties.js +0 -271
  416. package/bin/keycloakify/generateTheme/generateMessageProperties.js.map +0 -1
  417. package/bin/keycloakify/generateTheme/generateSrcMainResources.d.ts +0 -21
  418. package/bin/keycloakify/generateTheme/generateSrcMainResources.js +0 -340
  419. package/bin/keycloakify/generateTheme/generateSrcMainResources.js.map +0 -1
  420. package/bin/keycloakify/generateTheme/generateTheme.d.ts +0 -13
  421. package/bin/keycloakify/generateTheme/generateTheme.js +0 -115
  422. package/bin/keycloakify/generateTheme/generateTheme.js.map +0 -1
  423. package/bin/keycloakify/generateTheme/generateThemeVariants.d.ts +0 -5
  424. package/bin/keycloakify/generateTheme/generateThemeVariants.js +0 -67
  425. package/bin/keycloakify/generateTheme/generateThemeVariants.js.map +0 -1
  426. package/bin/keycloakify/generateTheme/index.d.ts +0 -1
  427. package/bin/keycloakify/generateTheme/index.js +0 -18
  428. package/bin/keycloakify/generateTheme/index.js.map +0 -1
  429. package/bin/keycloakify/generateTheme/readExtraPageNames.d.ts +0 -5
  430. package/bin/keycloakify/generateTheme/readExtraPageNames.js +0 -105
  431. package/bin/keycloakify/generateTheme/readExtraPageNames.js.map +0 -1
  432. package/bin/keycloakify/generateTheme/readFieldNameUsage.d.ts +0 -7
  433. package/bin/keycloakify/generateTheme/readFieldNameUsage.js +0 -141
  434. package/bin/keycloakify/generateTheme/readFieldNameUsage.js.map +0 -1
  435. package/bin/keycloakify/index.d.ts +0 -2
  436. package/bin/keycloakify/index.js +0 -23
  437. package/bin/keycloakify/index.js.map +0 -1
  438. package/bin/keycloakify/keycloakify.d.ts +0 -1
  439. package/bin/keycloakify/keycloakify.js +0 -166
  440. package/bin/keycloakify/keycloakify.js.map +0 -1
  441. package/bin/keycloakify/replacers/replaceImportsInCssCode.d.ts +0 -15
  442. package/bin/keycloakify/replacers/replaceImportsInCssCode.js +0 -88
  443. package/bin/keycloakify/replacers/replaceImportsInCssCode.js.map +0 -1
  444. package/bin/keycloakify/replacers/replaceImportsInInlineCssCode.d.ts +0 -9
  445. package/bin/keycloakify/replacers/replaceImportsInInlineCssCode.js +0 -38
  446. package/bin/keycloakify/replacers/replaceImportsInInlineCssCode.js.map +0 -1
  447. package/bin/keycloakify/replacers/replaceImportsInJsCode/index.d.ts +0 -1
  448. package/bin/keycloakify/replacers/replaceImportsInJsCode/index.js +0 -18
  449. package/bin/keycloakify/replacers/replaceImportsInJsCode/index.js.map +0 -1
  450. package/bin/keycloakify/replacers/replaceImportsInJsCode/replaceImportsInJsCode.d.ts +0 -12
  451. package/bin/keycloakify/replacers/replaceImportsInJsCode/replaceImportsInJsCode.js +0 -70
  452. package/bin/keycloakify/replacers/replaceImportsInJsCode/replaceImportsInJsCode.js.map +0 -1
  453. package/bin/keycloakify/replacers/replaceImportsInJsCode/vite.d.ts +0 -13
  454. package/bin/keycloakify/replacers/replaceImportsInJsCode/vite.js +0 -95
  455. package/bin/keycloakify/replacers/replaceImportsInJsCode/vite.js.map +0 -1
  456. package/bin/keycloakify/replacers/replaceImportsInJsCode/webpack.d.ts +0 -12
  457. package/bin/keycloakify/replacers/replaceImportsInJsCode/webpack.js +0 -103
  458. package/bin/keycloakify/replacers/replaceImportsInJsCode/webpack.js.map +0 -1
  459. package/bin/promptKeycloakVersion.d.ts +0 -3
  460. package/bin/promptKeycloakVersion.js +0 -121
  461. package/bin/promptKeycloakVersion.js.map +0 -1
  462. package/bin/tools/OptionalIfCanBeUndefined.d.ts +0 -14
  463. package/bin/tools/OptionalIfCanBeUndefined.js +0 -3
  464. package/bin/tools/OptionalIfCanBeUndefined.js.map +0 -1
  465. package/bin/tools/SemVer.d.ts +0 -26
  466. package/bin/tools/SemVer.js +0 -119
  467. package/bin/tools/SemVer.js.map +0 -1
  468. package/bin/tools/String.prototype.replaceAll.d.ts +0 -1
  469. package/bin/tools/String.prototype.replaceAll.js +0 -29
  470. package/bin/tools/String.prototype.replaceAll.js.map +0 -1
  471. package/bin/tools/crawl.d.ts +0 -5
  472. package/bin/tools/crawl.js +0 -74
  473. package/bin/tools/crawl.js.map +0 -1
  474. package/bin/tools/crc32.d.ts +0 -9
  475. package/bin/tools/crc32.js +0 -64
  476. package/bin/tools/crc32.js.map +0 -1
  477. package/bin/tools/deflate.d.ts +0 -24
  478. package/bin/tools/deflate.js +0 -155
  479. package/bin/tools/deflate.js.map +0 -1
  480. package/bin/tools/fetchProxyOptions.d.ts +0 -5
  481. package/bin/tools/fetchProxyOptions.js +0 -172
  482. package/bin/tools/fetchProxyOptions.js.map +0 -1
  483. package/bin/tools/fs.existsAsync.d.ts +0 -1
  484. package/bin/tools/fs.existsAsync.js +0 -86
  485. package/bin/tools/fs.existsAsync.js.map +0 -1
  486. package/bin/tools/fs.rm.d.ts +0 -8
  487. package/bin/tools/fs.rm.js +0 -151
  488. package/bin/tools/fs.rm.js.map +0 -1
  489. package/bin/tools/fs.rmSync.d.ts +0 -8
  490. package/bin/tools/fs.rmSync.js +0 -58
  491. package/bin/tools/fs.rmSync.js.map +0 -1
  492. package/bin/tools/getAbsoluteAndInOsFormatPath.d.ts +0 -4
  493. package/bin/tools/getAbsoluteAndInOsFormatPath.js +0 -16
  494. package/bin/tools/getAbsoluteAndInOsFormatPath.js.map +0 -1
  495. package/bin/tools/getThisCodebaseRootDirPath.d.ts +0 -1
  496. package/bin/tools/getThisCodebaseRootDirPath.js +0 -43
  497. package/bin/tools/getThisCodebaseRootDirPath.js.map +0 -1
  498. package/bin/tools/grant-exec-perms.d.ts +0 -1
  499. package/bin/tools/grant-exec-perms.js +0 -100
  500. package/bin/tools/grant-exec-perms.js.map +0 -1
  501. package/bin/tools/isInside.d.ts +0 -4
  502. package/bin/tools/isInside.js +0 -10
  503. package/bin/tools/isInside.js.map +0 -1
  504. package/bin/tools/kebabCaseToSnakeCase.d.ts +0 -1
  505. package/bin/tools/kebabCaseToSnakeCase.js +0 -35
  506. package/bin/tools/kebabCaseToSnakeCase.js.map +0 -1
  507. package/bin/tools/logger.d.ts +0 -12
  508. package/bin/tools/logger.js +0 -23
  509. package/bin/tools/logger.js.map +0 -1
  510. package/bin/tools/octokit-addons/getLatestsSemVersionedTag.d.ts +0 -14
  511. package/bin/tools/octokit-addons/getLatestsSemVersionedTag.js +0 -119
  512. package/bin/tools/octokit-addons/getLatestsSemVersionedTag.js.map +0 -1
  513. package/bin/tools/octokit-addons/listTags.d.ts +0 -13
  514. package/bin/tools/octokit-addons/listTags.js +0 -154
  515. package/bin/tools/octokit-addons/listTags.js.map +0 -1
  516. package/bin/tools/partitionPromiseSettledResults.d.ts +0 -2
  517. package/bin/tools/partitionPromiseSettledResults.js +0 -41
  518. package/bin/tools/partitionPromiseSettledResults.js.map +0 -1
  519. package/bin/tools/readThisNpmProjectVersion.d.ts +0 -1
  520. package/bin/tools/readThisNpmProjectVersion.js +0 -37
  521. package/bin/tools/readThisNpmProjectVersion.js.map +0 -1
  522. package/bin/tools/tee.d.ts +0 -3
  523. package/bin/tools/tee.js +0 -37
  524. package/bin/tools/tee.js.map +0 -1
  525. package/bin/tools/transformCodebase.d.ts +0 -20
  526. package/bin/tools/transformCodebase.js +0 -97
  527. package/bin/tools/transformCodebase.js.map +0 -1
  528. package/bin/tools/trimIndent.d.ts +0 -5
  529. package/bin/tools/trimIndent.js +0 -82
  530. package/bin/tools/trimIndent.js.map +0 -1
  531. package/bin/tools/unzip.d.ts +0 -2
  532. package/bin/tools/unzip.js +0 -274
  533. package/bin/tools/unzip.js.map +0 -1
  534. package/index.d.ts +0 -1
  535. package/index.js +0 -2
  536. package/index.js.map +0 -1
  537. package/lib/keycloakJsAdapter.d.ts +0 -51
  538. package/lib/keycloakJsAdapter.js +0 -74
  539. package/lib/keycloakJsAdapter.js.map +0 -1
  540. package/src/bin/constants.ts +0 -13
  541. package/src/bin/download-builtin-keycloak-theme.ts +0 -290
  542. package/src/bin/downloadAndUnzip.ts +0 -203
  543. package/src/bin/eject-keycloak-page.ts +0 -64
  544. package/src/bin/keycloakify/buildOptions/UserProvidedBuildOptions.ts +0 -21
  545. package/src/bin/keycloakify/buildOptions/buildOptions.ts +0 -189
  546. package/src/bin/keycloakify/buildOptions/getCacheDirPath.ts +0 -25
  547. package/src/bin/keycloakify/buildOptions/getNpmWorkspaceRootDirPath.ts +0 -49
  548. package/src/bin/keycloakify/buildOptions/getReactAppRootDirPath.ts +0 -23
  549. package/src/bin/keycloakify/buildOptions/index.ts +0 -1
  550. package/src/bin/keycloakify/buildOptions/parsedPackageJson.ts +0 -32
  551. package/src/bin/keycloakify/buildOptions/resolvedViteConfig.ts +0 -74
  552. package/src/bin/keycloakify/generateTheme/downloadKeycloakStaticResources.ts +0 -49
  553. package/src/bin/keycloakify/generateTheme/generateTheme.ts +0 -44
  554. package/src/bin/keycloakify/generateTheme/generateThemeVariants.ts +0 -50
  555. package/src/bin/keycloakify/generateTheme/index.ts +0 -1
  556. package/src/bin/keycloakify/generateTheme/readFieldNameUsage.ts +0 -55
  557. package/src/bin/promptKeycloakVersion.ts +0 -49
  558. package/src/bin/tools/grant-exec-perms.ts +0 -19
  559. package/src/bin/tools/logger.ts +0 -27
  560. package/src/bin/tools/unzip.ts +0 -141
  561. package/src/index.ts +0 -1
  562. package/src/lib/keycloakJsAdapter.ts +0 -118
  563. package/vite-plugin/index.js.map +0 -1
  564. package/vite-plugin/tsconfig.tsbuildinfo +0 -1
  565. package/vite-plugin/vite-plugin.d.ts +0 -6
  566. package/vite-plugin/vite-plugin.js +0 -158
  567. package/vite-plugin/vite-plugin.js.map +0 -1
@@ -0,0 +1,80 @@
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 {
5
+ readMetaInfKeycloakThemes,
6
+ writeMetaInfKeycloakThemes
7
+ } from "../../shared/metaInfKeycloakThemes";
8
+ import { assert } from "tsafe/assert";
9
+
10
+ export type BuildOptionsLike = {
11
+ keycloakifyBuildDirPath: string;
12
+ };
13
+
14
+ assert<BuildOptions extends BuildOptionsLike ? true : false>();
15
+
16
+ export function generateSrcMainResourcesForThemeVariant(params: {
17
+ themeName: string;
18
+ themeVariantName: string;
19
+ buildOptions: BuildOptionsLike;
20
+ }) {
21
+ const { themeName, themeVariantName, buildOptions } = params;
22
+
23
+ const mainThemeDirPath = pathJoin(
24
+ buildOptions.keycloakifyBuildDirPath,
25
+ "src",
26
+ "main",
27
+ "resources",
28
+ "theme",
29
+ themeName
30
+ );
31
+
32
+ transformCodebase({
33
+ srcDirPath: mainThemeDirPath,
34
+ destDirPath: pathJoin(mainThemeDirPath, "..", themeVariantName),
35
+ transformSourceCode: ({ fileRelativePath, sourceCode }) => {
36
+ if (
37
+ pathExtname(fileRelativePath) === ".ftl" &&
38
+ fileRelativePath.split(pathSep).length === 2
39
+ ) {
40
+ const modifiedSourceCode = Buffer.from(
41
+ Buffer.from(sourceCode)
42
+ .toString("utf-8")
43
+ .replace(
44
+ `out["themeName"] = "${themeName}";`,
45
+ `out["themeName"] = "${themeVariantName}";`
46
+ ),
47
+ "utf8"
48
+ );
49
+
50
+ assert(Buffer.compare(modifiedSourceCode, sourceCode) !== 0);
51
+
52
+ return { modifiedSourceCode };
53
+ }
54
+
55
+ return { modifiedSourceCode: sourceCode };
56
+ }
57
+ });
58
+
59
+ {
60
+ const updatedMetaInfKeycloakThemes = readMetaInfKeycloakThemes({
61
+ keycloakifyBuildDirPath: buildOptions.keycloakifyBuildDirPath
62
+ });
63
+
64
+ updatedMetaInfKeycloakThemes.themes.push({
65
+ name: themeVariantName,
66
+ types: (() => {
67
+ const theme = updatedMetaInfKeycloakThemes.themes.find(
68
+ ({ name }) => name === themeName
69
+ );
70
+ assert(theme !== undefined);
71
+ return theme.types;
72
+ })()
73
+ });
74
+
75
+ writeMetaInfKeycloakThemes({
76
+ keycloakifyBuildDirPath: buildOptions.keycloakifyBuildDirPath,
77
+ metaInfKeycloakThemes: updatedMetaInfKeycloakThemes
78
+ });
79
+ }
80
+ }
@@ -0,0 +1 @@
1
+ export * from "./generateSrcMainResources";
@@ -1,20 +1,28 @@
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";
8
-
9
- export function readExtraPagesNames(params: { themeSrcDirPath: string; themeType: ThemeType }): string[] {
6
+ import {
7
+ type ThemeType,
8
+ accountThemePageIds,
9
+ loginThemePageIds
10
+ } from "../../shared/constants";
11
+
12
+ export function readExtraPagesNames(params: {
13
+ themeSrcDirPath: string;
14
+ themeType: ThemeType;
15
+ }): string[] {
10
16
  const { themeSrcDirPath, themeType } = params;
11
17
 
12
18
  const filePaths = crawl({
13
- "dirPath": pathJoin(themeSrcDirPath, themeType),
14
- "returnedPathsType": "absolute"
19
+ dirPath: pathJoin(themeSrcDirPath, themeType),
20
+ returnedPathsType: "absolute"
15
21
  }).filter(filePath => /\.(ts|tsx|js|jsx)$/.test(filePath));
16
22
 
17
- const candidateFilePaths = filePaths.filter(filePath => /kcContext\.[^.]+$/.test(filePath));
23
+ const candidateFilePaths = filePaths.filter(filePath =>
24
+ /kcContext\.[^.]+$/.test(filePath)
25
+ );
18
26
 
19
27
  if (candidateFilePaths.length === 0) {
20
28
  candidateFilePaths.push(...filePaths);
@@ -25,7 +33,12 @@ export function readExtraPagesNames(params: { themeSrcDirPath: string; themeType
25
33
  for (const candidateFilPath of candidateFilePaths) {
26
34
  const rawSourceFile = fs.readFileSync(candidateFilPath).toString("utf8");
27
35
 
28
- extraPages.push(...Array.from(rawSourceFile.matchAll(/["']?pageId["']?\s*:\s*["']([^.]+.ftl)["']/g), m => m[1]));
36
+ extraPages.push(
37
+ ...Array.from(
38
+ rawSourceFile.matchAll(/["']?pageId["']?\s*:\s*["']([^.]+.ftl)["']/g),
39
+ m => m[1]
40
+ )
41
+ );
29
42
  }
30
43
 
31
44
  return extraPages.reduce(...removeDuplicates<string>()).filter(pageId => {
@@ -0,0 +1,83 @@
1
+ import { crawl } from "../../tools/crawl";
2
+ import { join as pathJoin } from "path";
3
+ import * as fs from "fs";
4
+ import type { ThemeType } from "../../shared/constants";
5
+ import { getThisCodebaseRootDirPath } from "../../tools/getThisCodebaseRootDirPath";
6
+
7
+ /** Assumes the theme type exists */
8
+ export function readFieldNameUsage(params: {
9
+ themeSrcDirPath: string;
10
+ themeType: ThemeType;
11
+ }): string[] {
12
+ const { themeSrcDirPath, themeType } = params;
13
+
14
+ const fieldNames = new Set<string>();
15
+
16
+ for (const srcDirPath of [
17
+ pathJoin(getThisCodebaseRootDirPath(), "src", themeType),
18
+ pathJoin(themeSrcDirPath, themeType)
19
+ ]) {
20
+ const filePaths = crawl({
21
+ dirPath: srcDirPath,
22
+ returnedPathsType: "absolute"
23
+ }).filter(filePath => /\.(ts|tsx|js|jsx)$/.test(filePath));
24
+
25
+ for (const filePath of filePaths) {
26
+ const rawSourceFile = fs.readFileSync(filePath).toString("utf8");
27
+
28
+ if (!rawSourceFile.includes("messagesPerField")) {
29
+ continue;
30
+ }
31
+
32
+ for (const functionName of [
33
+ "printIfExists",
34
+ "existsError",
35
+ "get",
36
+ "exists",
37
+ "getFirstError"
38
+ ] as const) {
39
+ if (!rawSourceFile.includes(functionName)) {
40
+ continue;
41
+ }
42
+
43
+ try {
44
+ rawSourceFile
45
+ .split(functionName)
46
+ .filter(part => part.startsWith("("))
47
+ .map(part => {
48
+ let [p1] = part.split(")");
49
+
50
+ p1 = p1.slice(1);
51
+
52
+ return p1;
53
+ })
54
+ .map(part => {
55
+ return part
56
+ .split(",")
57
+ .map(a => a.trim())
58
+ .filter((...[, i]) =>
59
+ functionName !== "printIfExists" ? true : i === 0
60
+ )
61
+ .filter(
62
+ a =>
63
+ a.startsWith('"') ||
64
+ a.startsWith("'") ||
65
+ a.startsWith("`")
66
+ )
67
+ .filter(
68
+ a =>
69
+ a.endsWith('"') ||
70
+ a.endsWith("'") ||
71
+ a.endsWith("`")
72
+ )
73
+ .map(a => a.slice(1).slice(0, -1));
74
+ })
75
+ .flat()
76
+ .forEach(fieldName => fieldNames.add(fieldName));
77
+ } catch {}
78
+ }
79
+ }
80
+ }
81
+
82
+ return Array.from(fieldNames);
83
+ }
@@ -1,10 +1,16 @@
1
1
  import * as fs from "fs";
2
- import { join as pathJoin, relative as pathRelative, basename as pathBasename } from "path";
2
+ import {
3
+ join as pathJoin,
4
+ relative as pathRelative,
5
+ basename as pathBasename
6
+ } from "path";
3
7
  import { assert } from "tsafe/assert";
4
- import type { BuildOptions } from "./buildOptions";
8
+ import type { BuildOptions } from "../shared/buildOptions";
9
+ import { accountV1ThemeName } from "../shared/constants";
5
10
 
6
11
  export type BuildOptionsLike = {
7
12
  keycloakifyBuildDirPath: string;
13
+ themeNames: string[];
8
14
  };
9
15
 
10
16
  assert<BuildOptions extends BuildOptionsLike ? true : false>();
@@ -15,14 +21,20 @@ const containerName = "keycloak-testing-container";
15
21
  const keycloakVersion = "24.0.4";
16
22
 
17
23
  /** 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;
24
+ export function generateStartKeycloakTestingContainer(params: {
25
+ jarFilePath: string;
26
+ doesImplementAccountTheme: boolean;
27
+ buildOptions: BuildOptionsLike;
28
+ }) {
29
+ const { jarFilePath, doesImplementAccountTheme, buildOptions } = params;
20
30
 
21
31
  const themeRelativeDirPath = pathJoin("src", "main", "resources", "theme");
22
- const themeDirPath = pathJoin(buildOptions.keycloakifyBuildDirPath, themeRelativeDirPath);
23
32
 
24
33
  fs.writeFileSync(
25
- pathJoin(buildOptions.keycloakifyBuildDirPath, generateStartKeycloakTestingContainer.basename),
34
+ pathJoin(
35
+ buildOptions.keycloakifyBuildDirPath,
36
+ generateStartKeycloakTestingContainer.basename
37
+ ),
26
38
  Buffer.from(
27
39
  [
28
40
  "#!/usr/bin/env bash",
@@ -40,22 +52,23 @@ export function generateStartKeycloakTestingContainer(params: { jarFilePath: str
40
52
  "$(pwd)",
41
53
  pathRelative(buildOptions.keycloakifyBuildDirPath, jarFilePath)
42
54
  )}":"/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
- ),
55
+ [
56
+ ...(doesImplementAccountTheme ? [accountV1ThemeName] : []),
57
+ ...buildOptions.themeNames
58
+ ].map(
59
+ themeName =>
60
+ ` -v "${pathJoin(
61
+ "$(pwd)",
62
+ themeRelativeDirPath,
63
+ themeName
64
+ ).replace(/\\/g, "/")}":"/opt/keycloak/themes/${themeName}":rw \\`
65
+ ),
53
66
  ` -it quay.io/keycloak/keycloak:${keycloakVersion} \\`,
54
- ` start-dev --features=declarative-user-profile`,
67
+ ` start-dev`,
55
68
  ""
56
69
  ].join("\n"),
57
70
  "utf8"
58
71
  ),
59
- { "mode": 0o755 }
72
+ { mode: 0o755 }
60
73
  );
61
74
  }
@@ -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,40 +1,82 @@
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, skipBuildJarsEnvName } 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", {
19
+ stdio: ["ignore", "pipe", "ignore"]
20
+ });
21
+ } catch {}
21
22
 
22
- const { themeSrcDirPath } = getThemeSrcDirPath({ "reactAppRootDirPath": buildOptions.reactAppRootDirPath });
23
+ if (commandOutput?.toString("utf8").includes("Apache Maven")) {
24
+ break exit_if_maven_not_installed;
25
+ }
26
+
27
+ const installationCommand = (() => {
28
+ switch (os.platform()) {
29
+ case "darwin":
30
+ return "brew install mvn";
31
+ case "win32":
32
+ return "choco install mvn";
33
+ case "linux":
34
+ default:
35
+ return "sudo apt-get install mvn";
36
+ }
37
+ })();
38
+
39
+ console.log(
40
+ `${chalk.red("Apache Maven required.")} Install it with \`${chalk.bold(
41
+ installationCommand
42
+ )}\` (for example)`
43
+ );
44
+
45
+ process.exit(1);
46
+ }
47
+
48
+ const { cliCommandOptions } = params;
49
+
50
+ const buildOptions = readBuildOptions({ cliCommandOptions });
51
+
52
+ console.log(
53
+ [
54
+ chalk.cyan(`keycloakify v${readThisNpmPackageVersion()}`),
55
+ chalk.green(
56
+ `Building the keycloak theme in .${pathSep}${pathRelative(
57
+ process.cwd(),
58
+ buildOptions.keycloakifyBuildDirPath
59
+ )} ...`
60
+ )
61
+ ].join(" ")
62
+ );
63
+
64
+ const startTime = Date.now();
23
65
 
24
66
  {
25
67
  if (!fs.existsSync(buildOptions.keycloakifyBuildDirPath)) {
26
- fs.mkdirSync(buildOptions.keycloakifyBuildDirPath, { "recursive": true });
68
+ fs.mkdirSync(buildOptions.keycloakifyBuildDirPath, {
69
+ recursive: true
70
+ });
27
71
  }
28
72
 
29
- fs.writeFileSync(pathJoin(buildOptions.keycloakifyBuildDirPath, ".gitignore"), Buffer.from("*", "utf8"));
73
+ fs.writeFileSync(
74
+ pathJoin(buildOptions.keycloakifyBuildDirPath, ".gitignore"),
75
+ Buffer.from("*", "utf8")
76
+ );
30
77
  }
31
78
 
32
- const { doesImplementAccountTheme } = await generateTheme({
33
- themeSrcDirPath,
34
- "keycloakifySrcDirPath": pathJoin(getThisCodebaseRootDirPath(), "src"),
35
- "keycloakifyVersion": readThisNpmProjectVersion(),
36
- buildOptions
37
- });
79
+ await generateSrcMainResources({ buildOptions });
38
80
 
39
81
  run_post_build_script: {
40
82
  if (buildOptions.bundler !== "vite") {
@@ -42,58 +84,24 @@ export async function main() {
42
84
  }
43
85
 
44
86
  child_process.execSync("npx vite", {
45
- "cwd": buildOptions.reactAppRootDirPath,
46
- "env": {
87
+ cwd: buildOptions.reactAppRootDirPath,
88
+ env: {
47
89
  ...process.env,
48
- [keycloakifyBuildOptionsForPostPostBuildScriptEnvName]: JSON.stringify(buildOptions)
90
+ [vitePluginSubScriptEnvNames.runPostBuildScript]:
91
+ JSON.stringify(buildOptions)
49
92
  }
50
93
  });
51
94
  }
52
95
 
53
- const { lastJarFileBasename } = await buildJars({
54
- doesImplementAccountTheme,
55
- buildOptions
56
- });
96
+ build_jars: {
97
+ if (process.env[skipBuildJarsEnvName]) {
98
+ break build_jars;
99
+ }
57
100
 
58
- generateStartKeycloakTestingContainer({
59
- "jarFilePath": pathJoin(buildOptions.keycloakifyBuildDirPath, lastJarFileBasename),
60
- buildOptions
61
- });
101
+ await buildJars({ buildOptions });
102
+ }
62
103
 
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")
104
+ console.log(
105
+ chalk.green(`✓ built in ${((Date.now() - startTime) / 1000).toFixed(2)}s`)
98
106
  );
99
107
  }
@@ -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;
@@ -18,7 +18,15 @@ export function replaceImportsInCssCode(params: { cssCode: string }): {
18
18
  const cssGlobalsToDefine: Record<string, string> = {};
19
19
 
20
20
  new Set(cssCode.match(/url\(["']?\/[^/][^)"']+["']?\)[^;}]*?/g) ?? []).forEach(
21
- match => (cssGlobalsToDefine["url" + crypto.createHash("sha256").update(match).digest("hex").substring(0, 15)] = match)
21
+ match =>
22
+ (cssGlobalsToDefine[
23
+ "url" +
24
+ crypto
25
+ .createHash("sha256")
26
+ .update(match)
27
+ .digest("hex")
28
+ .substring(0, 15)
29
+ ] = match)
22
30
  );
23
31
 
24
32
  let fixedCssCode = cssCode;
@@ -26,26 +34,37 @@ export function replaceImportsInCssCode(params: { cssCode: string }): {
26
34
  Object.keys(cssGlobalsToDefine).forEach(
27
35
  cssVariableName =>
28
36
  //NOTE: split/join pattern ~ replace all
29
- (fixedCssCode = fixedCssCode.split(cssGlobalsToDefine[cssVariableName]).join(`var(--${cssVariableName})`))
37
+ (fixedCssCode = fixedCssCode
38
+ .split(cssGlobalsToDefine[cssVariableName])
39
+ .join(`var(--${cssVariableName})`))
30
40
  );
31
41
 
32
42
  return { fixedCssCode, cssGlobalsToDefine };
33
43
  }
34
44
 
35
- export function generateCssCodeToDefineGlobals(params: { cssGlobalsToDefine: Record<string, string>; buildOptions: BuildOptionsLike }): {
45
+ export function generateCssCodeToDefineGlobals(params: {
46
+ cssGlobalsToDefine: Record<string, string>;
47
+ buildOptions: BuildOptionsLike;
48
+ }): {
36
49
  cssCodeToPrependInHead: string;
37
50
  } {
38
51
  const { cssGlobalsToDefine, buildOptions } = params;
39
52
 
40
53
  return {
41
- "cssCodeToPrependInHead": [
54
+ cssCodeToPrependInHead: [
42
55
  ":root {",
43
56
  ...Object.keys(cssGlobalsToDefine)
44
57
  .map(cssVariableName =>
45
58
  [
46
59
  `--${cssVariableName}:`,
47
60
  cssGlobalsToDefine[cssVariableName].replace(
48
- new RegExp(`url\\(${(buildOptions.urlPathname ?? "/").replace(/\//g, "\\/")}`, "g"),
61
+ new RegExp(
62
+ `url\\(${(buildOptions.urlPathname ?? "/").replace(
63
+ /\//g,
64
+ "\\/"
65
+ )}`,
66
+ "g"
67
+ ),
49
68
  `url(\${url.resourcesPath}/${basenameOfTheKeycloakifyResourcesDir}/`
50
69
  )
51
70
  ].join(" ")
@@ -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;
@@ -8,7 +8,10 @@ export type BuildOptionsLike = {
8
8
 
9
9
  assert<BuildOptions extends BuildOptionsLike ? true : false>();
10
10
 
11
- export function replaceImportsInInlineCssCode(params: { cssCode: string; buildOptions: BuildOptionsLike }): {
11
+ export function replaceImportsInInlineCssCode(params: {
12
+ cssCode: string;
13
+ buildOptions: BuildOptionsLike;
14
+ }): {
12
15
  fixedCssCode: string;
13
16
  } {
14
17
  const { cssCode, buildOptions } = params;
@@ -17,7 +20,8 @@ export function replaceImportsInInlineCssCode(params: { cssCode: string; buildOp
17
20
  buildOptions.urlPathname === undefined
18
21
  ? /url\(["']?\/([^/][^)"']+)["']?\)/g
19
22
  : new RegExp(`url\\(["']?${buildOptions.urlPathname}([^)"']+)["']?\\)`, "g"),
20
- (...[, group]) => `url(\${url.resourcesPath}/${basenameOfTheKeycloakifyResourcesDir}/${group})`
23
+ (...[, group]) =>
24
+ `url(\${url.resourcesPath}/${basenameOfTheKeycloakifyResourcesDir}/${group})`
21
25
  );
22
26
 
23
27
  return { fixedCssCode };
@@ -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";
@@ -13,7 +13,10 @@ export type BuildOptionsLike = {
13
13
 
14
14
  assert<BuildOptions extends BuildOptionsLike ? true : false>();
15
15
 
16
- export function replaceImportsInJsCode(params: { jsCode: string; buildOptions: BuildOptionsLike }) {
16
+ export function replaceImportsInJsCode(params: {
17
+ jsCode: string;
18
+ buildOptions: BuildOptionsLike;
19
+ }) {
17
20
  const { jsCode, buildOptions } = params;
18
21
 
19
22
  const { fixedJsCode } = (() => {
@@ -22,8 +25,8 @@ export function replaceImportsInJsCode(params: { jsCode: string; buildOptions: B
22
25
  return replaceImportsInJsCode_vite({
23
26
  jsCode,
24
27
  buildOptions,
25
- "basenameOfAssetsFiles": readAssetsDirSync({
26
- "assetsDirPath": params.buildOptions.assetsDirPath
28
+ basenameOfAssetsFiles: readAssetsDirSync({
29
+ assetsDirPath: params.buildOptions.assetsDirPath
27
30
  })
28
31
  });
29
32
  case "webpack":