keycloakify 10.0.0-rc.99 → 10.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/PUBLIC_URL.js +2 -2
- package/PUBLIC_URL.js.map +1 -1
- package/README.md +28 -242
- package/account/KcContext/KcContext.d.ts +4 -1
- package/account/KcContext/KcContext.js.map +1 -1
- package/account/KcContext/kcContextMocks.js +7 -4
- package/account/KcContext/kcContextMocks.js.map +1 -1
- package/account/Template.js +3 -1
- package/account/Template.js.map +1 -1
- package/account/i18n/GenericI18n.d.ts +6 -0
- package/account/i18n/GenericI18n.js +2 -0
- package/account/i18n/GenericI18n.js.map +1 -0
- package/account/i18n/i18n.d.ts +24 -30
- package/account/i18n/i18n.js +50 -70
- package/account/i18n/i18n.js.map +1 -1
- package/account/i18n/index.d.ts +4 -3
- package/account/i18n/index.js.map +1 -1
- package/account/i18n/messages_defaultSet/ar.js.map +1 -0
- package/account/i18n/messages_defaultSet/ca.js.map +1 -0
- package/account/i18n/messages_defaultSet/cs.js.map +1 -0
- package/account/i18n/messages_defaultSet/da.js.map +1 -0
- package/account/i18n/messages_defaultSet/de.js.map +1 -0
- package/account/i18n/messages_defaultSet/el.js.map +1 -0
- package/account/i18n/messages_defaultSet/en.js.map +1 -0
- package/account/i18n/messages_defaultSet/es.js.map +1 -0
- package/account/i18n/messages_defaultSet/fa.js.map +1 -0
- package/account/i18n/messages_defaultSet/fi.js.map +1 -0
- package/account/i18n/messages_defaultSet/fr.js.map +1 -0
- package/account/i18n/messages_defaultSet/hu.js.map +1 -0
- package/account/i18n/{baseMessages → messages_defaultSet}/index.d.ts +1 -1
- package/account/i18n/{baseMessages → messages_defaultSet}/index.js +3 -3
- package/account/i18n/messages_defaultSet/index.js.map +1 -0
- package/account/i18n/messages_defaultSet/it.js.map +1 -0
- package/account/i18n/messages_defaultSet/ja.js.map +1 -0
- package/account/i18n/messages_defaultSet/lt.js.map +1 -0
- package/account/i18n/messages_defaultSet/lv.js.map +1 -0
- package/account/i18n/messages_defaultSet/nl.js.map +1 -0
- package/account/i18n/messages_defaultSet/no.js.map +1 -0
- package/account/i18n/messages_defaultSet/pl.js.map +1 -0
- package/account/i18n/messages_defaultSet/pt-BR.js.map +1 -0
- package/account/i18n/messages_defaultSet/ru.js.map +1 -0
- package/account/i18n/messages_defaultSet/sk.js.map +1 -0
- package/account/i18n/messages_defaultSet/sv.js.map +1 -0
- package/account/i18n/messages_defaultSet/th.js.map +1 -0
- package/account/i18n/messages_defaultSet/tr.js.map +1 -0
- package/account/i18n/messages_defaultSet/uk.js.map +1 -0
- package/account/i18n/messages_defaultSet/zh-CN.js.map +1 -0
- package/account/i18n/useI18n.d.ts +6 -5
- package/account/i18n/useI18n.js +37 -4
- package/account/i18n/useI18n.js.map +1 -1
- package/account/pages/FederatedIdentity.js +1 -1
- package/account/pages/FederatedIdentity.js.map +1 -1
- package/account/pages/Totp.js +5 -1
- package/account/pages/Totp.js.map +1 -1
- package/bin/193.index.js +5 -5
- package/bin/{490.index.js → 246.index.js} +22 -4
- package/bin/31.index.js +264 -203
- package/bin/440.index.js +178 -106
- package/bin/453.index.js +59 -7
- package/bin/526.index.js +525 -137
- package/bin/599.index.js +567 -0
- package/bin/{893.index.js → 622.index.js} +239 -231
- package/bin/{36.index.js → 678.index.js} +577 -71
- package/bin/{180.index.js → 697.index.js} +611 -526
- package/bin/743.index.js +70 -0
- package/bin/780.index.js +895 -0
- package/bin/786.index.js +185 -0
- package/bin/932.index.js +740 -52
- package/bin/{966.index.js → 941.index.js} +2 -19
- package/bin/97.index.js +29 -7
- package/bin/main.js +22 -10
- package/bin/shared/KeycloakVersionRange.d.ts +3 -3
- package/bin/shared/buildContext.d.ts +52 -16
- package/bin/shared/buildContext.js.map +1 -1
- package/bin/shared/constants.d.ts +18 -17
- package/bin/shared/constants.js +15 -14
- package/bin/shared/constants.js.map +1 -1
- package/bin/shared/copyKeycloakResourcesToPublic.js.map +1 -1
- package/bin/shared/downloadKeycloakDefaultTheme.js.map +1 -1
- package/bin/shared/generateKcGenTs.d.ts +3 -0
- package/bin/shared/generateKcGenTs.js.map +1 -1
- package/bin/shared/getLatestsSemVersionedTag.d.ts +15 -0
- package/bin/shared/getLatestsSemVersionedTag.js.map +1 -0
- package/bin/shared/promptKeycloakVersion.d.ts +3 -1
- package/bin/shared/promptKeycloakVersion.js.map +1 -1
- package/lib/getKcClsx.js +2 -1
- package/lib/getKcClsx.js.map +1 -1
- package/login/KcContext/KcContext.d.ts +10 -11
- package/login/KcContext/KcContext.js.map +1 -1
- package/login/KcContext/kcContextMocks.js +4 -5
- package/login/KcContext/kcContextMocks.js.map +1 -1
- package/login/Template.js +13 -7
- package/login/Template.js.map +1 -1
- package/login/TemplateProps.d.ts +0 -1
- package/login/UserProfileFormFields.js +6 -5
- package/login/UserProfileFormFields.js.map +1 -1
- package/login/i18n/GenericI18n.d.ts +6 -0
- package/login/i18n/GenericI18n.js +2 -0
- package/login/i18n/GenericI18n.js.map +1 -0
- package/login/i18n/i18n.d.ts +22 -32
- package/login/i18n/i18n.js +51 -92
- package/login/i18n/i18n.js.map +1 -1
- package/login/i18n/index.d.ts +4 -3
- package/login/i18n/index.js.map +1 -1
- package/login/i18n/messages_defaultSet/ar.js.map +1 -0
- package/login/i18n/messages_defaultSet/ca.js.map +1 -0
- package/login/i18n/messages_defaultSet/cs.js.map +1 -0
- package/login/i18n/messages_defaultSet/da.js.map +1 -0
- package/login/i18n/messages_defaultSet/de.js.map +1 -0
- package/login/i18n/messages_defaultSet/el.js.map +1 -0
- package/login/i18n/messages_defaultSet/en.js.map +1 -0
- package/login/i18n/messages_defaultSet/es.js.map +1 -0
- package/login/i18n/messages_defaultSet/fa.js.map +1 -0
- package/login/i18n/messages_defaultSet/fi.js.map +1 -0
- package/login/i18n/messages_defaultSet/fr.js.map +1 -0
- package/login/i18n/messages_defaultSet/hu.js.map +1 -0
- package/login/i18n/{baseMessages → messages_defaultSet}/index.d.ts +1 -1
- package/login/i18n/{baseMessages → messages_defaultSet}/index.js +3 -3
- package/login/i18n/messages_defaultSet/index.js.map +1 -0
- package/login/i18n/messages_defaultSet/it.js.map +1 -0
- package/login/i18n/messages_defaultSet/ja.js.map +1 -0
- package/login/i18n/messages_defaultSet/lt.js.map +1 -0
- package/login/i18n/messages_defaultSet/lv.js.map +1 -0
- package/login/i18n/messages_defaultSet/nl.js.map +1 -0
- package/login/i18n/messages_defaultSet/no.js.map +1 -0
- package/login/i18n/messages_defaultSet/pl.js.map +1 -0
- package/login/i18n/messages_defaultSet/pt-BR.js.map +1 -0
- package/login/i18n/messages_defaultSet/ru.js.map +1 -0
- package/login/i18n/messages_defaultSet/sk.js.map +1 -0
- package/login/i18n/messages_defaultSet/sv.js.map +1 -0
- package/login/i18n/messages_defaultSet/th.js.map +1 -0
- package/login/i18n/messages_defaultSet/tr.js.map +1 -0
- package/login/i18n/messages_defaultSet/uk.js.map +1 -0
- package/login/i18n/messages_defaultSet/zh-CN.js.map +1 -0
- package/login/i18n/useI18n.d.ts +6 -5
- package/login/i18n/useI18n.js +37 -4
- package/login/i18n/useI18n.js.map +1 -1
- package/login/lib/useUserProfileForm.d.ts +2 -0
- package/login/lib/useUserProfileForm.js +44 -10
- package/login/lib/useUserProfileForm.js.map +1 -1
- package/login/pages/Error.js +1 -1
- package/login/pages/Error.js.map +1 -1
- package/login/pages/Info.js +15 -3
- package/login/pages/Info.js.map +1 -1
- package/login/pages/Login.js +6 -2
- package/login/pages/Login.js.map +1 -1
- package/login/pages/LoginConfigTotp.js +5 -1
- package/login/pages/LoginConfigTotp.js.map +1 -1
- package/login/pages/LoginOtp.js +3 -1
- package/login/pages/LoginOtp.js.map +1 -1
- package/login/pages/LoginPassword.js +3 -1
- package/login/pages/LoginPassword.js.map +1 -1
- package/login/pages/LoginRecoveryAuthnCodeInput.js +3 -1
- package/login/pages/LoginRecoveryAuthnCodeInput.js.map +1 -1
- package/login/pages/LoginResetPassword.js +3 -1
- package/login/pages/LoginResetPassword.js.map +1 -1
- package/login/pages/LoginUpdatePassword.js +5 -1
- package/login/pages/LoginUpdatePassword.js.map +1 -1
- package/login/pages/Register.js +3 -1
- package/login/pages/Register.js.map +1 -1
- package/login/pages/SamlPostForm.js +1 -1
- package/login/pages/SamlPostForm.js.map +1 -1
- package/login/pages/SelectAuthenticator.js +2 -2
- package/login/pages/SelectAuthenticator.js.map +1 -1
- package/login/pages/WebauthnAuthenticate.js +3 -3
- package/login/pages/WebauthnAuthenticate.js.map +1 -1
- package/login/pages/WebauthnRegister.js +2 -2
- package/package.json +265 -245
- package/src/PUBLIC_URL.ts +2 -2
- package/src/account/KcContext/KcContext.ts +4 -1
- package/src/account/KcContext/kcContextMocks.ts +7 -4
- package/src/account/Template.tsx +6 -1
- package/src/account/i18n/GenericI18n.tsx +6 -0
- package/src/account/i18n/i18n.tsx +91 -129
- package/src/account/i18n/index.ts +4 -3
- package/src/account/i18n/{baseMessages → messages_defaultSet}/index.ts +3 -3
- package/src/account/i18n/useI18n.tsx +95 -0
- package/src/account/pages/FederatedIdentity.tsx +1 -1
- package/src/account/pages/Totp.tsx +16 -6
- package/src/bin/add-story.ts +42 -10
- package/src/bin/eject-page.ts +119 -11
- package/src/bin/initialize-account-theme/copyBoilerplate.ts +32 -0
- package/src/bin/initialize-account-theme/index.ts +1 -0
- package/src/bin/initialize-account-theme/initialize-account-theme.ts +112 -0
- package/src/bin/initialize-account-theme/initializeAccountTheme_multiPage.ts +21 -0
- package/src/bin/initialize-account-theme/initializeAccountTheme_singlePage.ts +152 -0
- package/src/bin/initialize-account-theme/src/multi-page/KcContext.ts +12 -0
- package/src/bin/initialize-account-theme/src/multi-page/KcPage.tsx +25 -0
- package/src/bin/initialize-account-theme/src/multi-page/KcPageStory.tsx +38 -0
- package/src/bin/initialize-account-theme/src/multi-page/i18n.ts +5 -0
- package/src/bin/initialize-account-theme/src/single-page/KcContext.ts +7 -0
- package/src/bin/initialize-account-theme/src/single-page/KcPage.tsx +11 -0
- package/src/bin/initialize-account-theme/updateAccountThemeImplementationInConfig.ts +92 -0
- package/src/bin/initialize-email-theme.ts +1 -1
- package/src/bin/keycloakify/buildJars/buildJar.ts +38 -24
- package/src/bin/keycloakify/buildJars/buildJars.ts +6 -3
- package/src/bin/keycloakify/buildJars/getKeycloakVersionRangeForJar.ts +5 -5
- package/src/bin/keycloakify/generateFtl/generateFtl.ts +16 -16
- package/src/bin/keycloakify/generateFtl/kcContextDeclarationTemplate.ftl +471 -364
- package/src/bin/keycloakify/generateResources/bringInAccountV1.ts +7 -7
- package/src/bin/keycloakify/generateResources/generateMessageProperties.ts +3 -3
- package/src/bin/keycloakify/generateResources/generateResourcesForMainTheme.ts +125 -59
- package/src/bin/keycloakify/generateResources/generateResourcesForThemeVariant.ts +2 -2
- package/src/bin/keycloakify/generateResources/readExtraPageNames.ts +5 -8
- package/src/bin/keycloakify/keycloakify.ts +8 -6
- package/src/bin/keycloakify/replacers/replaceImportsInCssCode.ts +41 -27
- package/src/bin/keycloakify/replacers/replaceImportsInJsCode/replaceImportsInJsCode.ts +2 -2
- package/src/bin/keycloakify/replacers/replaceImportsInJsCode/vite.ts +6 -6
- package/src/bin/keycloakify/replacers/replaceImportsInJsCode/webpack.ts +4 -4
- package/src/bin/main.ts +16 -2
- package/src/bin/shared/KeycloakVersionRange.ts +4 -4
- package/src/bin/shared/buildContext.ts +360 -251
- package/src/bin/shared/constants.ts +19 -17
- package/src/bin/shared/copyKeycloakResourcesToPublic.ts +6 -6
- package/src/bin/shared/downloadKeycloakDefaultTheme.ts +48 -27
- package/src/bin/shared/downloadKeycloakStaticResources.ts +2 -2
- package/src/bin/shared/generateKcGenTs.ts +110 -3
- package/src/bin/shared/getLatestsSemVersionedTag.ts +201 -0
- package/src/bin/shared/promptKeycloakVersion.ts +20 -80
- package/src/bin/start-keycloak/appBuild.ts +15 -11
- package/src/bin/start-keycloak/keycloakifyBuild.ts +3 -3
- package/src/bin/start-keycloak/myrealm-realm-18.json +4 -4
- package/src/bin/start-keycloak/myrealm-realm-19.json +4 -4
- package/src/bin/start-keycloak/myrealm-realm-20.json +4 -4
- package/src/bin/start-keycloak/myrealm-realm-21.json +4 -4
- package/src/bin/start-keycloak/myrealm-realm-23.json +3 -3
- package/src/bin/start-keycloak/myrealm-realm-24.json +4 -4
- package/src/bin/start-keycloak/myrealm-realm-25.json +4 -4
- package/src/bin/start-keycloak/start-keycloak.ts +256 -102
- package/src/bin/tools/assertNoPnpmDlx.ts +4 -2
- package/src/bin/tools/downloadAndExtractArchive.ts +10 -9
- package/src/bin/tools/fetchProxyOptions.ts +32 -11
- package/src/bin/tools/npmInstall.ts +63 -0
- package/src/bin/tools/octokit-addons/getLatestsSemVersionedTag.ts +3 -2
- package/src/bin/tsconfig.json +3 -1
- package/src/lib/getKcClsx.ts +2 -2
- package/src/login/KcContext/KcContext.ts +10 -28
- package/src/login/KcContext/kcContextMocks.ts +5 -6
- package/src/login/Template.tsx +32 -54
- package/src/login/TemplateProps.ts +0 -1
- package/src/login/UserProfileFormFields.tsx +15 -11
- package/src/login/i18n/GenericI18n.tsx +6 -0
- package/src/login/i18n/i18n.tsx +91 -166
- package/src/login/i18n/index.ts +4 -3
- package/src/login/i18n/{baseMessages → messages_defaultSet}/index.ts +3 -3
- package/src/login/i18n/useI18n.tsx +95 -0
- package/src/login/lib/useUserProfileForm.tsx +68 -20
- package/src/login/pages/Error.tsx +1 -1
- package/src/login/pages/Info.tsx +26 -6
- package/src/login/pages/Login.tsx +20 -9
- package/src/login/pages/LoginConfigTotp.tsx +16 -6
- package/src/login/pages/LoginOtp.tsx +8 -3
- package/src/login/pages/LoginPassword.tsx +8 -3
- package/src/login/pages/LoginRecoveryAuthnCodeInput.tsx +8 -3
- package/src/login/pages/LoginResetPassword.tsx +8 -3
- package/src/login/pages/LoginUpdatePassword.tsx +55 -47
- package/src/login/pages/Register.tsx +8 -3
- package/src/login/pages/SamlPostForm.tsx +1 -1
- package/src/login/pages/SelectAuthenticator.tsx +4 -4
- package/src/login/pages/WebauthnAuthenticate.tsx +5 -5
- package/src/login/pages/WebauthnRegister.tsx +2 -2
- package/src/tools/useInsertLinkTags.ts +9 -1
- package/src/tools/useInsertScriptTags.ts +9 -1
- package/src/vite-plugin/vite-plugin.ts +15 -13
- package/stories/account/pages/Log.stories.tsx +1 -0
- package/stories/account-spa/index.stories.tsx +94 -0
- package/stories/intro/intro.stories.tsx +90 -0
- package/stories/login/pages/Info.stories.tsx +7 -2
- package/stories/login/pages/Login.stories.tsx +25 -13
- package/stories/login/pages/Register.stories.tsx +11 -9
- package/stories/login/pages/SelectAuthenticator.stories.tsx +41 -0
- package/stories/login/pages/Terms.stories.tsx +6 -2
- package/tools/useInsertLinkTags.js +7 -1
- package/tools/useInsertLinkTags.js.map +1 -1
- package/tools/useInsertScriptTags.js +7 -1
- package/tools/useInsertScriptTags.js.map +1 -1
- package/vite-plugin/index.js +25820 -25686
- package/vite-plugin/vite-plugin.d.ts +6 -4
- package/account/i18n/baseMessages/ar.js.map +0 -1
- package/account/i18n/baseMessages/ca.js.map +0 -1
- package/account/i18n/baseMessages/cs.js.map +0 -1
- package/account/i18n/baseMessages/da.js.map +0 -1
- package/account/i18n/baseMessages/de.js.map +0 -1
- package/account/i18n/baseMessages/el.js.map +0 -1
- package/account/i18n/baseMessages/en.js.map +0 -1
- package/account/i18n/baseMessages/es.js.map +0 -1
- package/account/i18n/baseMessages/fa.js.map +0 -1
- package/account/i18n/baseMessages/fi.js.map +0 -1
- package/account/i18n/baseMessages/fr.js.map +0 -1
- package/account/i18n/baseMessages/hu.js.map +0 -1
- package/account/i18n/baseMessages/index.js.map +0 -1
- package/account/i18n/baseMessages/it.js.map +0 -1
- package/account/i18n/baseMessages/ja.js.map +0 -1
- package/account/i18n/baseMessages/lt.js.map +0 -1
- package/account/i18n/baseMessages/lv.js.map +0 -1
- package/account/i18n/baseMessages/nl.js.map +0 -1
- package/account/i18n/baseMessages/no.js.map +0 -1
- package/account/i18n/baseMessages/pl.js.map +0 -1
- package/account/i18n/baseMessages/pt-BR.js.map +0 -1
- package/account/i18n/baseMessages/ru.js.map +0 -1
- package/account/i18n/baseMessages/sk.js.map +0 -1
- package/account/i18n/baseMessages/sv.js.map +0 -1
- package/account/i18n/baseMessages/th.js.map +0 -1
- package/account/i18n/baseMessages/tr.js.map +0 -1
- package/account/i18n/baseMessages/uk.js.map +0 -1
- package/account/i18n/baseMessages/zh-CN.js.map +0 -1
- package/bin/538.index.js +0 -108
- package/login/i18n/baseMessages/ar.js.map +0 -1
- package/login/i18n/baseMessages/ca.js.map +0 -1
- package/login/i18n/baseMessages/cs.js.map +0 -1
- package/login/i18n/baseMessages/da.js.map +0 -1
- package/login/i18n/baseMessages/de.js.map +0 -1
- package/login/i18n/baseMessages/el.js.map +0 -1
- package/login/i18n/baseMessages/en.js.map +0 -1
- package/login/i18n/baseMessages/es.js.map +0 -1
- package/login/i18n/baseMessages/fa.js.map +0 -1
- package/login/i18n/baseMessages/fi.js.map +0 -1
- package/login/i18n/baseMessages/fr.js.map +0 -1
- package/login/i18n/baseMessages/hu.js.map +0 -1
- package/login/i18n/baseMessages/index.js.map +0 -1
- package/login/i18n/baseMessages/it.js.map +0 -1
- package/login/i18n/baseMessages/ja.js.map +0 -1
- package/login/i18n/baseMessages/lt.js.map +0 -1
- package/login/i18n/baseMessages/lv.js.map +0 -1
- package/login/i18n/baseMessages/nl.js.map +0 -1
- package/login/i18n/baseMessages/no.js.map +0 -1
- package/login/i18n/baseMessages/pl.js.map +0 -1
- package/login/i18n/baseMessages/pt-BR.js.map +0 -1
- package/login/i18n/baseMessages/ru.js.map +0 -1
- package/login/i18n/baseMessages/sk.js.map +0 -1
- package/login/i18n/baseMessages/sv.js.map +0 -1
- package/login/i18n/baseMessages/th.js.map +0 -1
- package/login/i18n/baseMessages/tr.js.map +0 -1
- package/login/i18n/baseMessages/uk.js.map +0 -1
- package/login/i18n/baseMessages/zh-CN.js.map +0 -1
- package/src/account/i18n/useI18n.ts +0 -44
- package/src/login/i18n/useI18n.ts +0 -44
- package/src/tools/ExtractAfterStartingWith.ts +0 -4
- package/tools/ExtractAfterStartingWith.d.ts +0 -1
- package/tools/ExtractAfterStartingWith.js +0 -2
- package/tools/ExtractAfterStartingWith.js.map +0 -1
- /package/account/i18n/{baseMessages → messages_defaultSet}/ar.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/ar.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/ca.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/ca.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/cs.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/cs.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/da.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/da.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/de.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/de.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/el.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/el.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/en.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/en.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/es.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/es.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/fa.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/fa.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/fi.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/fi.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/fr.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/fr.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/hu.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/hu.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/it.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/it.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/ja.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/ja.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/lt.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/lt.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/lv.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/lv.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/nl.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/nl.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/no.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/no.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/pl.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/pl.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/pt-BR.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/pt-BR.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/ru.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/ru.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/sk.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/sk.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/sv.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/sv.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/th.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/th.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/tr.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/tr.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/uk.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/uk.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/zh-CN.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/zh-CN.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/ar.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/ar.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/ca.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/ca.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/cs.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/cs.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/da.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/da.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/de.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/de.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/el.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/el.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/en.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/en.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/es.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/es.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/fa.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/fa.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/fi.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/fi.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/fr.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/fr.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/hu.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/hu.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/it.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/it.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/ja.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/ja.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/lt.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/lt.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/lv.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/lv.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/nl.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/nl.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/no.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/no.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/pl.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/pl.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/pt-BR.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/pt-BR.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/ru.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/ru.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/sk.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/sk.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/sv.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/sv.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/th.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/th.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/tr.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/tr.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/uk.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/uk.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/zh-CN.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/zh-CN.js +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/ar.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/ca.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/cs.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/da.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/de.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/el.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/en.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/es.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/fa.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/fi.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/fr.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/hu.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/it.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/ja.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/lt.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/lv.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/nl.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/no.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/pl.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/pt-BR.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/ru.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/sk.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/sv.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/th.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/tr.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/uk.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/zh-CN.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/ar.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/ca.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/cs.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/da.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/de.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/el.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/en.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/es.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/fa.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/fi.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/fr.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/hu.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/it.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/ja.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/lt.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/lv.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/nl.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/no.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/pl.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/pt-BR.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/ru.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/sk.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/sv.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/th.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/tr.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/uk.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/zh-CN.ts +0 -0
package/src/bin/eject-page.ts
CHANGED
@@ -3,16 +3,21 @@
|
|
3
3
|
import { getThisCodebaseRootDirPath } from "./tools/getThisCodebaseRootDirPath";
|
4
4
|
import cliSelect from "cli-select";
|
5
5
|
import {
|
6
|
-
|
7
|
-
|
6
|
+
LOGIN_THEME_PAGE_IDS,
|
7
|
+
ACCOUNT_THEME_PAGE_IDS,
|
8
8
|
type LoginThemePageId,
|
9
9
|
type AccountThemePageId,
|
10
|
-
|
10
|
+
THEME_TYPES,
|
11
11
|
type ThemeType
|
12
12
|
} from "./shared/constants";
|
13
13
|
import { capitalize } from "tsafe/capitalize";
|
14
14
|
import * as fs from "fs";
|
15
|
-
import {
|
15
|
+
import {
|
16
|
+
join as pathJoin,
|
17
|
+
relative as pathRelative,
|
18
|
+
dirname as pathDirname,
|
19
|
+
basename as pathBasename
|
20
|
+
} from "path";
|
16
21
|
import { kebabCaseToCamelCase } from "./tools/kebabCaseToSnakeCase";
|
17
22
|
import { assert, Equals } from "tsafe/assert";
|
18
23
|
import type { CliCommandOptions } from "./main";
|
@@ -28,11 +33,114 @@ export async function command(params: { cliCommandOptions: CliCommandOptions })
|
|
28
33
|
|
29
34
|
console.log(chalk.cyan("Theme type:"));
|
30
35
|
|
31
|
-
const
|
32
|
-
values
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
+
const themeType = await (async () => {
|
37
|
+
const values = THEME_TYPES.filter(themeType => {
|
38
|
+
switch (themeType) {
|
39
|
+
case "account":
|
40
|
+
return buildContext.implementedThemeTypes.account.isImplemented;
|
41
|
+
case "login":
|
42
|
+
return buildContext.implementedThemeTypes.login.isImplemented;
|
43
|
+
}
|
44
|
+
assert<Equals<typeof themeType, never>>(false);
|
45
|
+
});
|
46
|
+
|
47
|
+
assert(values.length > 0, "No theme is implemented in this project");
|
48
|
+
|
49
|
+
if (values.length === 1) {
|
50
|
+
return values[0];
|
51
|
+
}
|
52
|
+
|
53
|
+
const { value } = await cliSelect<ThemeType>({
|
54
|
+
values
|
55
|
+
}).catch(() => {
|
56
|
+
process.exit(-1);
|
57
|
+
});
|
58
|
+
|
59
|
+
return value;
|
60
|
+
})();
|
61
|
+
|
62
|
+
if (
|
63
|
+
themeType === "account" &&
|
64
|
+
(assert(buildContext.implementedThemeTypes.account.isImplemented),
|
65
|
+
buildContext.implementedThemeTypes.account.type === "Single-Page")
|
66
|
+
) {
|
67
|
+
const srcDirPath = pathJoin(
|
68
|
+
pathDirname(buildContext.packageJsonFilePath),
|
69
|
+
"node_modules",
|
70
|
+
"@keycloakify",
|
71
|
+
"keycloak-account-ui",
|
72
|
+
"src"
|
73
|
+
);
|
74
|
+
|
75
|
+
console.log(
|
76
|
+
[
|
77
|
+
`There isn't an interactive CLI to eject components of the Single-Page Account theme.`,
|
78
|
+
`You can however copy paste into your codebase the any file or directory from the following source directory:`,
|
79
|
+
``,
|
80
|
+
`${chalk.bold(pathJoin(pathRelative(process.cwd(), srcDirPath)))}`,
|
81
|
+
``
|
82
|
+
].join("\n")
|
83
|
+
);
|
84
|
+
|
85
|
+
eject_entrypoint: {
|
86
|
+
const kcAccountUiTsxFileRelativePath = "KcAccountUi.tsx";
|
87
|
+
|
88
|
+
const accountThemeSrcDirPath = pathJoin(
|
89
|
+
buildContext.themeSrcDirPath,
|
90
|
+
"account"
|
91
|
+
);
|
92
|
+
|
93
|
+
const targetFilePath = pathJoin(
|
94
|
+
accountThemeSrcDirPath,
|
95
|
+
kcAccountUiTsxFileRelativePath
|
96
|
+
);
|
97
|
+
|
98
|
+
if (fs.existsSync(targetFilePath)) {
|
99
|
+
break eject_entrypoint;
|
100
|
+
}
|
101
|
+
|
102
|
+
fs.cpSync(
|
103
|
+
pathJoin(srcDirPath, kcAccountUiTsxFileRelativePath),
|
104
|
+
targetFilePath
|
105
|
+
);
|
106
|
+
|
107
|
+
{
|
108
|
+
const kcPageTsxFilePath = pathJoin(accountThemeSrcDirPath, "KcPage.tsx");
|
109
|
+
|
110
|
+
const kcPageTsxCode = fs.readFileSync(kcPageTsxFilePath).toString("utf8");
|
111
|
+
|
112
|
+
const componentName = pathBasename(
|
113
|
+
kcAccountUiTsxFileRelativePath
|
114
|
+
).replace(/.tsx$/, "");
|
115
|
+
|
116
|
+
const modifiedKcPageTsxCode = kcPageTsxCode.replace(
|
117
|
+
`@keycloakify/keycloak-account-ui/${componentName}`,
|
118
|
+
`./${componentName}`
|
119
|
+
);
|
120
|
+
|
121
|
+
fs.writeFileSync(
|
122
|
+
kcPageTsxFilePath,
|
123
|
+
Buffer.from(modifiedKcPageTsxCode, "utf8")
|
124
|
+
);
|
125
|
+
}
|
126
|
+
|
127
|
+
const routesTsxFilePath = pathRelative(
|
128
|
+
process.cwd(),
|
129
|
+
pathJoin(srcDirPath, "routes.tsx")
|
130
|
+
);
|
131
|
+
|
132
|
+
console.log(
|
133
|
+
[
|
134
|
+
`To help you get started ${chalk.bold(pathRelative(process.cwd(), targetFilePath))} has been copied into your project.`,
|
135
|
+
`The next step is usually to eject ${chalk.bold(routesTsxFilePath)}`,
|
136
|
+
`with \`cp ${routesTsxFilePath} ${pathRelative(process.cwd(), accountThemeSrcDirPath)}\``,
|
137
|
+
`then update the import of routes in ${kcAccountUiTsxFileRelativePath}.`
|
138
|
+
].join("\n")
|
139
|
+
);
|
140
|
+
}
|
141
|
+
|
142
|
+
process.exit(0);
|
143
|
+
}
|
36
144
|
|
37
145
|
console.log(`→ ${themeType}`);
|
38
146
|
|
@@ -54,10 +162,10 @@ export async function command(params: { cliCommandOptions: CliCommandOptions })
|
|
54
162
|
return [
|
55
163
|
templateValue,
|
56
164
|
userProfileFormFieldsValue,
|
57
|
-
...
|
165
|
+
...LOGIN_THEME_PAGE_IDS
|
58
166
|
];
|
59
167
|
case "account":
|
60
|
-
return [templateValue, ...
|
168
|
+
return [templateValue, ...ACCOUNT_THEME_PAGE_IDS];
|
61
169
|
}
|
62
170
|
assert<Equals<typeof themeType, never>>(false);
|
63
171
|
})()
|
@@ -0,0 +1,32 @@
|
|
1
|
+
import * as fs from "fs";
|
2
|
+
import { join as pathJoin } from "path";
|
3
|
+
import { getThisCodebaseRootDirPath } from "../tools/getThisCodebaseRootDirPath";
|
4
|
+
import { assert, type Equals } from "tsafe/assert";
|
5
|
+
|
6
|
+
export function copyBoilerplate(params: {
|
7
|
+
accountThemeType: "Single-Page" | "Multi-Page";
|
8
|
+
accountThemeSrcDirPath: string;
|
9
|
+
}) {
|
10
|
+
const { accountThemeType, accountThemeSrcDirPath } = params;
|
11
|
+
|
12
|
+
fs.cpSync(
|
13
|
+
pathJoin(
|
14
|
+
getThisCodebaseRootDirPath(),
|
15
|
+
"src",
|
16
|
+
"bin",
|
17
|
+
"initialize-account-theme",
|
18
|
+
"src",
|
19
|
+
(() => {
|
20
|
+
switch (accountThemeType) {
|
21
|
+
case "Single-Page":
|
22
|
+
return "single-page";
|
23
|
+
case "Multi-Page":
|
24
|
+
return "multi-page";
|
25
|
+
}
|
26
|
+
assert<Equals<typeof accountThemeType, never>>(false);
|
27
|
+
})()
|
28
|
+
),
|
29
|
+
accountThemeSrcDirPath,
|
30
|
+
{ recursive: true }
|
31
|
+
);
|
32
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
export * from "./initialize-account-theme";
|
@@ -0,0 +1,112 @@
|
|
1
|
+
import { getBuildContext } from "../shared/buildContext";
|
2
|
+
import type { CliCommandOptions } from "../main";
|
3
|
+
import cliSelect from "cli-select";
|
4
|
+
import child_process from "child_process";
|
5
|
+
import chalk from "chalk";
|
6
|
+
import { join as pathJoin, relative as pathRelative } from "path";
|
7
|
+
import * as fs from "fs";
|
8
|
+
import { updateAccountThemeImplementationInConfig } from "./updateAccountThemeImplementationInConfig";
|
9
|
+
import { generateKcGenTs } from "../shared/generateKcGenTs";
|
10
|
+
|
11
|
+
export async function command(params: { cliCommandOptions: CliCommandOptions }) {
|
12
|
+
const { cliCommandOptions } = params;
|
13
|
+
|
14
|
+
const buildContext = getBuildContext({ cliCommandOptions });
|
15
|
+
|
16
|
+
const accountThemeSrcDirPath = pathJoin(buildContext.themeSrcDirPath, "account");
|
17
|
+
|
18
|
+
if (
|
19
|
+
fs.existsSync(accountThemeSrcDirPath) &&
|
20
|
+
fs.readdirSync(accountThemeSrcDirPath).length > 0
|
21
|
+
) {
|
22
|
+
console.warn(
|
23
|
+
chalk.red(
|
24
|
+
`There is already a ${pathRelative(
|
25
|
+
process.cwd(),
|
26
|
+
accountThemeSrcDirPath
|
27
|
+
)} directory in your project. Aborting.`
|
28
|
+
)
|
29
|
+
);
|
30
|
+
|
31
|
+
process.exit(-1);
|
32
|
+
}
|
33
|
+
|
34
|
+
exit_if_uncommitted_changes: {
|
35
|
+
let hasUncommittedChanges: boolean | undefined = undefined;
|
36
|
+
|
37
|
+
try {
|
38
|
+
hasUncommittedChanges =
|
39
|
+
child_process
|
40
|
+
.execSync(`git status --porcelain`, {
|
41
|
+
cwd: buildContext.projectDirPath
|
42
|
+
})
|
43
|
+
.toString()
|
44
|
+
.trim() !== "";
|
45
|
+
} catch {
|
46
|
+
// Probably not a git repository
|
47
|
+
break exit_if_uncommitted_changes;
|
48
|
+
}
|
49
|
+
|
50
|
+
if (!hasUncommittedChanges) {
|
51
|
+
break exit_if_uncommitted_changes;
|
52
|
+
}
|
53
|
+
console.warn(
|
54
|
+
[
|
55
|
+
chalk.red(
|
56
|
+
"Please commit or stash your changes before running this command.\n"
|
57
|
+
),
|
58
|
+
"This command will modify your project's files so it's better to have a clean working directory",
|
59
|
+
"so that you can easily see what has been changed and revert if needed."
|
60
|
+
].join(" ")
|
61
|
+
);
|
62
|
+
|
63
|
+
process.exit(-1);
|
64
|
+
}
|
65
|
+
|
66
|
+
const { value: accountThemeType } = await cliSelect({
|
67
|
+
values: ["Single-Page" as const, "Multi-Page" as const]
|
68
|
+
}).catch(() => {
|
69
|
+
process.exit(-1);
|
70
|
+
});
|
71
|
+
|
72
|
+
switch (accountThemeType) {
|
73
|
+
case "Multi-Page":
|
74
|
+
{
|
75
|
+
const { initializeAccountTheme_multiPage } = await import(
|
76
|
+
"./initializeAccountTheme_multiPage"
|
77
|
+
);
|
78
|
+
|
79
|
+
await initializeAccountTheme_multiPage({
|
80
|
+
accountThemeSrcDirPath
|
81
|
+
});
|
82
|
+
}
|
83
|
+
break;
|
84
|
+
case "Single-Page":
|
85
|
+
{
|
86
|
+
const { initializeAccountTheme_singlePage } = await import(
|
87
|
+
"./initializeAccountTheme_singlePage"
|
88
|
+
);
|
89
|
+
|
90
|
+
await initializeAccountTheme_singlePage({
|
91
|
+
accountThemeSrcDirPath,
|
92
|
+
buildContext
|
93
|
+
});
|
94
|
+
}
|
95
|
+
break;
|
96
|
+
}
|
97
|
+
|
98
|
+
updateAccountThemeImplementationInConfig({ buildContext, accountThemeType });
|
99
|
+
|
100
|
+
await generateKcGenTs({
|
101
|
+
buildContext: {
|
102
|
+
...buildContext,
|
103
|
+
implementedThemeTypes: {
|
104
|
+
...buildContext.implementedThemeTypes,
|
105
|
+
account: {
|
106
|
+
isImplemented: true,
|
107
|
+
type: accountThemeType
|
108
|
+
}
|
109
|
+
}
|
110
|
+
}
|
111
|
+
});
|
112
|
+
}
|
@@ -0,0 +1,21 @@
|
|
1
|
+
import { relative as pathRelative } from "path";
|
2
|
+
import chalk from "chalk";
|
3
|
+
import { copyBoilerplate } from "./copyBoilerplate";
|
4
|
+
|
5
|
+
export async function initializeAccountTheme_multiPage(params: {
|
6
|
+
accountThemeSrcDirPath: string;
|
7
|
+
}) {
|
8
|
+
const { accountThemeSrcDirPath } = params;
|
9
|
+
|
10
|
+
copyBoilerplate({
|
11
|
+
accountThemeType: "Multi-Page",
|
12
|
+
accountThemeSrcDirPath
|
13
|
+
});
|
14
|
+
|
15
|
+
console.log(
|
16
|
+
[
|
17
|
+
chalk.green("The Multi-Page account theme has been initialized."),
|
18
|
+
`Directory created: ${chalk.bold(pathRelative(process.cwd(), accountThemeSrcDirPath))}`
|
19
|
+
].join("\n")
|
20
|
+
);
|
21
|
+
}
|
@@ -0,0 +1,152 @@
|
|
1
|
+
import { join as pathJoin, relative as pathRelative, dirname as pathDirname } from "path";
|
2
|
+
import type { BuildContext } from "../shared/buildContext";
|
3
|
+
import * as fs from "fs";
|
4
|
+
import chalk from "chalk";
|
5
|
+
import {
|
6
|
+
getLatestsSemVersionedTag,
|
7
|
+
type BuildContextLike as BuildContextLike_getLatestsSemVersionedTag
|
8
|
+
} from "../shared/getLatestsSemVersionedTag";
|
9
|
+
import fetch from "make-fetch-happen";
|
10
|
+
import { z } from "zod";
|
11
|
+
import { assert, type Equals } from "tsafe/assert";
|
12
|
+
import { is } from "tsafe/is";
|
13
|
+
import { id } from "tsafe/id";
|
14
|
+
import { npmInstall } from "../tools/npmInstall";
|
15
|
+
import { copyBoilerplate } from "./copyBoilerplate";
|
16
|
+
import { getThisCodebaseRootDirPath } from "../tools/getThisCodebaseRootDirPath";
|
17
|
+
|
18
|
+
type BuildContextLike = BuildContextLike_getLatestsSemVersionedTag & {
|
19
|
+
fetchOptions: BuildContext["fetchOptions"];
|
20
|
+
packageJsonFilePath: string;
|
21
|
+
};
|
22
|
+
|
23
|
+
assert<BuildContext extends BuildContextLike ? true : false>();
|
24
|
+
|
25
|
+
export async function initializeAccountTheme_singlePage(params: {
|
26
|
+
accountThemeSrcDirPath: string;
|
27
|
+
buildContext: BuildContextLike;
|
28
|
+
}) {
|
29
|
+
const { accountThemeSrcDirPath, buildContext } = params;
|
30
|
+
|
31
|
+
const OWNER = "keycloakify";
|
32
|
+
const REPO = "keycloak-account-ui";
|
33
|
+
|
34
|
+
const [semVersionedTag] = await getLatestsSemVersionedTag({
|
35
|
+
owner: OWNER,
|
36
|
+
repo: REPO,
|
37
|
+
count: 1,
|
38
|
+
doIgnoreReleaseCandidates: false,
|
39
|
+
buildContext
|
40
|
+
});
|
41
|
+
|
42
|
+
const dependencies = await fetch(
|
43
|
+
`https://raw.githubusercontent.com/${OWNER}/${REPO}/${semVersionedTag.tag}/dependencies.gen.json`,
|
44
|
+
buildContext.fetchOptions
|
45
|
+
)
|
46
|
+
.then(r => r.json())
|
47
|
+
.then(
|
48
|
+
(() => {
|
49
|
+
type Dependencies = {
|
50
|
+
dependencies: Record<string, string>;
|
51
|
+
devDependencies?: Record<string, string>;
|
52
|
+
};
|
53
|
+
|
54
|
+
const zDependencies = (() => {
|
55
|
+
type TargetType = Dependencies;
|
56
|
+
|
57
|
+
const zTargetType = z.object({
|
58
|
+
dependencies: z.record(z.string()),
|
59
|
+
devDependencies: z.record(z.string()).optional()
|
60
|
+
});
|
61
|
+
|
62
|
+
assert<Equals<z.infer<typeof zTargetType>, TargetType>>();
|
63
|
+
|
64
|
+
return id<z.ZodType<TargetType>>(zTargetType);
|
65
|
+
})();
|
66
|
+
|
67
|
+
return o => zDependencies.parse(o);
|
68
|
+
})()
|
69
|
+
);
|
70
|
+
|
71
|
+
dependencies.dependencies["@keycloakify/keycloak-account-ui"] = semVersionedTag.tag;
|
72
|
+
|
73
|
+
const parsedPackageJson = (() => {
|
74
|
+
type ParsedPackageJson = {
|
75
|
+
dependencies?: Record<string, string>;
|
76
|
+
devDependencies?: Record<string, string>;
|
77
|
+
};
|
78
|
+
|
79
|
+
const zParsedPackageJson = (() => {
|
80
|
+
type TargetType = ParsedPackageJson;
|
81
|
+
|
82
|
+
const zTargetType = z.object({
|
83
|
+
dependencies: z.record(z.string()).optional(),
|
84
|
+
devDependencies: z.record(z.string()).optional()
|
85
|
+
});
|
86
|
+
|
87
|
+
assert<Equals<z.infer<typeof zTargetType>, TargetType>>();
|
88
|
+
|
89
|
+
return id<z.ZodType<TargetType>>(zTargetType);
|
90
|
+
})();
|
91
|
+
const parsedPackageJson = JSON.parse(
|
92
|
+
fs.readFileSync(buildContext.packageJsonFilePath).toString("utf8")
|
93
|
+
);
|
94
|
+
|
95
|
+
zParsedPackageJson.parse(parsedPackageJson);
|
96
|
+
|
97
|
+
assert(is<ParsedPackageJson>(parsedPackageJson));
|
98
|
+
|
99
|
+
return parsedPackageJson;
|
100
|
+
})();
|
101
|
+
|
102
|
+
parsedPackageJson.dependencies = {
|
103
|
+
...parsedPackageJson.dependencies,
|
104
|
+
...dependencies.dependencies
|
105
|
+
};
|
106
|
+
|
107
|
+
parsedPackageJson.devDependencies = {
|
108
|
+
...parsedPackageJson.devDependencies,
|
109
|
+
...dependencies.devDependencies
|
110
|
+
};
|
111
|
+
|
112
|
+
if (Object.keys(parsedPackageJson.devDependencies).length === 0) {
|
113
|
+
delete parsedPackageJson.devDependencies;
|
114
|
+
}
|
115
|
+
|
116
|
+
fs.writeFileSync(
|
117
|
+
buildContext.packageJsonFilePath,
|
118
|
+
JSON.stringify(parsedPackageJson, undefined, 4)
|
119
|
+
);
|
120
|
+
|
121
|
+
run_npm_install: {
|
122
|
+
if (
|
123
|
+
JSON.parse(
|
124
|
+
fs
|
125
|
+
.readFileSync(pathJoin(getThisCodebaseRootDirPath(), "package.json"))
|
126
|
+
.toString("utf8")
|
127
|
+
)["version"] === "0.0.0"
|
128
|
+
) {
|
129
|
+
//NOTE: Linked version
|
130
|
+
break run_npm_install;
|
131
|
+
}
|
132
|
+
|
133
|
+
npmInstall({ packageJsonDirPath: pathDirname(buildContext.packageJsonFilePath) });
|
134
|
+
}
|
135
|
+
|
136
|
+
copyBoilerplate({
|
137
|
+
accountThemeType: "Single-Page",
|
138
|
+
accountThemeSrcDirPath
|
139
|
+
});
|
140
|
+
|
141
|
+
console.log(
|
142
|
+
[
|
143
|
+
chalk.green(
|
144
|
+
"The Single-Page account theme has been successfully initialized."
|
145
|
+
),
|
146
|
+
`Using Account UI of Keycloak version: ${chalk.bold(semVersionedTag.tag.split("-")[0])}`,
|
147
|
+
`Directory created: ${chalk.bold(pathRelative(process.cwd(), accountThemeSrcDirPath))}`,
|
148
|
+
`Dependencies added to your project's package.json: `,
|
149
|
+
chalk.bold(JSON.stringify(dependencies, null, 2))
|
150
|
+
].join("\n")
|
151
|
+
);
|
152
|
+
}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
/* eslint-disable @typescript-eslint/ban-types */
|
2
|
+
import type { ExtendKcContext } from "keycloakify/account";
|
3
|
+
import type { KcEnvName, ThemeName } from "../kc.gen";
|
4
|
+
|
5
|
+
export type KcContextExtension = {
|
6
|
+
themeName: ThemeName;
|
7
|
+
properties: Record<KcEnvName, string> & {};
|
8
|
+
};
|
9
|
+
|
10
|
+
export type KcContextExtensionPerPage = {};
|
11
|
+
|
12
|
+
export type KcContext = ExtendKcContext<KcContextExtension, KcContextExtensionPerPage>;
|
@@ -0,0 +1,25 @@
|
|
1
|
+
import { Suspense } from "react";
|
2
|
+
import type { ClassKey } from "keycloakify/account";
|
3
|
+
import type { KcContext } from "./KcContext";
|
4
|
+
import { useI18n } from "./i18n";
|
5
|
+
import DefaultPage from "keycloakify/account/DefaultPage";
|
6
|
+
import Template from "keycloakify/account/Template";
|
7
|
+
|
8
|
+
export default function KcPage(props: { kcContext: KcContext }) {
|
9
|
+
const { kcContext } = props;
|
10
|
+
|
11
|
+
const { i18n } = useI18n({ kcContext });
|
12
|
+
|
13
|
+
return (
|
14
|
+
<Suspense>
|
15
|
+
{(() => {
|
16
|
+
switch (kcContext.pageId) {
|
17
|
+
default:
|
18
|
+
return <DefaultPage kcContext={kcContext} i18n={i18n} classes={classes} Template={Template} doUseDefaultCss={true} />;
|
19
|
+
}
|
20
|
+
})()}
|
21
|
+
</Suspense>
|
22
|
+
);
|
23
|
+
}
|
24
|
+
|
25
|
+
const classes = {} satisfies { [key in ClassKey]?: string };
|
@@ -0,0 +1,38 @@
|
|
1
|
+
import type { DeepPartial } from "keycloakify/tools/DeepPartial";
|
2
|
+
import type { KcContext } from "./KcContext";
|
3
|
+
import { createGetKcContextMock } from "keycloakify/account/KcContext";
|
4
|
+
import type { KcContextExtension, KcContextExtensionPerPage } from "./KcContext";
|
5
|
+
import KcPage from "./KcPage";
|
6
|
+
import { themeNames, kcEnvDefaults } from "../kc.gen";
|
7
|
+
|
8
|
+
const kcContextExtension: KcContextExtension = {
|
9
|
+
themeName: themeNames[0],
|
10
|
+
properties: {
|
11
|
+
...kcEnvDefaults
|
12
|
+
}
|
13
|
+
};
|
14
|
+
const kcContextExtensionPerPage: KcContextExtensionPerPage = {};
|
15
|
+
|
16
|
+
export const { getKcContextMock } = createGetKcContextMock({
|
17
|
+
kcContextExtension,
|
18
|
+
kcContextExtensionPerPage,
|
19
|
+
overrides: {},
|
20
|
+
overridesPerPage: {}
|
21
|
+
});
|
22
|
+
|
23
|
+
export function createKcPageStory<PageId extends KcContext["pageId"]>(params: { pageId: PageId }) {
|
24
|
+
const { pageId } = params;
|
25
|
+
|
26
|
+
function KcPageStory(props: { kcContext?: DeepPartial<Extract<KcContext, { pageId: PageId }>> }) {
|
27
|
+
const { kcContext: overrides } = props;
|
28
|
+
|
29
|
+
const kcContextMock = getKcContextMock({
|
30
|
+
pageId,
|
31
|
+
overrides
|
32
|
+
});
|
33
|
+
|
34
|
+
return <KcPage kcContext={kcContextMock} />;
|
35
|
+
}
|
36
|
+
|
37
|
+
return { KcPageStory };
|
38
|
+
}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import { lazy } from "react";
|
2
|
+
import { KcAccountUiLoader } from "@keycloakify/keycloak-account-ui";
|
3
|
+
import type { KcContext } from "./KcContext";
|
4
|
+
|
5
|
+
const KcAccountUi = lazy(() => import("@keycloakify/keycloak-account-ui/KcAccountUi"));
|
6
|
+
|
7
|
+
export default function KcPage(props: { kcContext: KcContext }) {
|
8
|
+
const { kcContext } = props;
|
9
|
+
|
10
|
+
return <KcAccountUiLoader kcContext={kcContext} KcAccountUi={KcAccountUi} />;
|
11
|
+
}
|
@@ -0,0 +1,92 @@
|
|
1
|
+
import { join as pathJoin } from "path";
|
2
|
+
import { assert, type Equals } from "tsafe/assert";
|
3
|
+
import type { BuildContext } from "../shared/buildContext";
|
4
|
+
import * as fs from "fs";
|
5
|
+
import chalk from "chalk";
|
6
|
+
import { z } from "zod";
|
7
|
+
import { id } from "tsafe/id";
|
8
|
+
|
9
|
+
export type BuildContextLike = {
|
10
|
+
bundler: BuildContext["bundler"];
|
11
|
+
};
|
12
|
+
|
13
|
+
assert<BuildContext extends BuildContextLike ? true : false>();
|
14
|
+
|
15
|
+
export function updateAccountThemeImplementationInConfig(params: {
|
16
|
+
buildContext: BuildContext;
|
17
|
+
accountThemeType: "Single-Page" | "Multi-Page";
|
18
|
+
}) {
|
19
|
+
const { buildContext, accountThemeType } = params;
|
20
|
+
|
21
|
+
switch (buildContext.bundler) {
|
22
|
+
case "vite":
|
23
|
+
{
|
24
|
+
const viteConfigPath = pathJoin(
|
25
|
+
buildContext.projectDirPath,
|
26
|
+
"vite.config.ts"
|
27
|
+
);
|
28
|
+
|
29
|
+
if (!fs.existsSync(viteConfigPath)) {
|
30
|
+
console.log(
|
31
|
+
chalk.bold(
|
32
|
+
`You must manually set the accountThemeImplementation to "${accountThemeType}" in your vite config`
|
33
|
+
)
|
34
|
+
);
|
35
|
+
break;
|
36
|
+
}
|
37
|
+
|
38
|
+
const viteConfigContent = fs
|
39
|
+
.readFileSync(viteConfigPath)
|
40
|
+
.toString("utf8");
|
41
|
+
|
42
|
+
const modifiedViteConfigContent = viteConfigContent.replace(
|
43
|
+
/accountThemeImplementation\s*:\s*"none"/,
|
44
|
+
`accountThemeImplementation: "${accountThemeType}"`
|
45
|
+
);
|
46
|
+
|
47
|
+
if (modifiedViteConfigContent === viteConfigContent) {
|
48
|
+
console.log(
|
49
|
+
chalk.bold(
|
50
|
+
`You must manually set the accountThemeImplementation to "${accountThemeType}" in your vite.config.ts`
|
51
|
+
)
|
52
|
+
);
|
53
|
+
break;
|
54
|
+
}
|
55
|
+
|
56
|
+
fs.writeFileSync(viteConfigPath, modifiedViteConfigContent);
|
57
|
+
}
|
58
|
+
break;
|
59
|
+
case "webpack":
|
60
|
+
{
|
61
|
+
const parsedPackageJson = (() => {
|
62
|
+
type ParsedPackageJson = {
|
63
|
+
keycloakify: Record<string, string>;
|
64
|
+
};
|
65
|
+
|
66
|
+
const zParsedPackageJson = (() => {
|
67
|
+
type TargetType = ParsedPackageJson;
|
68
|
+
|
69
|
+
const zTargetType = z.object({
|
70
|
+
keycloakify: z.record(z.string())
|
71
|
+
});
|
72
|
+
|
73
|
+
assert<Equals<z.infer<typeof zTargetType>, TargetType>>();
|
74
|
+
|
75
|
+
return id<z.ZodType<TargetType>>(zTargetType);
|
76
|
+
})();
|
77
|
+
|
78
|
+
return zParsedPackageJson.parse(
|
79
|
+
JSON.parse(
|
80
|
+
fs
|
81
|
+
.readFileSync(buildContext.packageJsonFilePath)
|
82
|
+
.toString("utf8")
|
83
|
+
)
|
84
|
+
);
|
85
|
+
})();
|
86
|
+
|
87
|
+
parsedPackageJson.keycloakify.accountThemeImplementation =
|
88
|
+
accountThemeType;
|
89
|
+
}
|
90
|
+
break;
|
91
|
+
}
|
92
|
+
}
|
@@ -30,7 +30,7 @@ export async function command(params: { cliCommandOptions: CliCommandOptions })
|
|
30
30
|
// NOTE: This is arbitrary
|
31
31
|
startingFromMajor: 17,
|
32
32
|
excludeMajorVersions: [],
|
33
|
-
|
33
|
+
buildContext
|
34
34
|
});
|
35
35
|
|
36
36
|
const { defaultThemeDirPath } = await downloadKeycloakDefaultTheme({
|