From e8a11991a00919a0ad3d1e20498f5d1be3c77e2d Mon Sep 17 00:00:00 2001 From: Joseph Garrone Date: Wed, 5 Jun 2024 21:13:58 +0200 Subject: [PATCH] Rename kcContext -> KcContext and improve consistency --- package.json | 1 - src/account/Fallback.tsx | 8 +++---- .../{kcContext => KcContext}/KcContext.ts | 0 .../getKcContextMock.ts | 0 src/account/{kcContext => KcContext}/index.ts | 0 .../kcContextMocks.ts | 2 +- src/account/Template.tsx | 6 ++--- src/account/TemplateProps.ts | 2 +- src/account/i18n/i18n.tsx | 4 ++-- src/account/i18n/index.ts | 1 + src/account/index.ts | 9 +++----- src/account/pages/Account.tsx | 2 +- src/account/pages/Applications.tsx | 12 +++++----- src/account/pages/FederatedIdentity.tsx | 6 ++--- src/account/pages/Log.tsx | 8 +++---- src/account/pages/PageProps.ts | 8 +++---- src/account/pages/Password.tsx | 4 ++-- src/account/pages/Sessions.tsx | 4 ++-- src/account/pages/Totp.tsx | 4 ++-- .../readExtraPageNames.ts | 2 +- src/login/Fallback.tsx | 6 ++--- .../{kcContext => KcContext}/KcContext.ts | 0 .../getKcContextMock.ts | 0 src/login/{kcContext => KcContext}/index.ts | 3 ++- .../kcContextMocks.ts | 2 +- src/login/Template.tsx | 4 ++-- src/login/TemplateProps.ts | 2 +- src/login/UserProfileFormFields.tsx | 4 ++-- src/login/i18n/i18n.tsx | 6 ++--- src/login/i18n/index.ts | 3 ++- src/login/index.ts | 12 +++------- src/login/lib/useDownloadTerms.ts | 4 ++-- src/login/lib/useUserProfileForm.tsx | 9 ++++---- src/login/pages/Code.tsx | 4 ++-- src/login/pages/DeleteAccountConfirm.tsx | 4 ++-- src/login/pages/DeleteCredential.tsx | 6 ++--- src/login/pages/Error.tsx | 2 +- src/login/pages/FrontchannelLogout.tsx | 2 +- src/login/pages/IdpReviewUserProfile.tsx | 6 ++--- src/login/pages/Info.tsx | 2 +- src/login/pages/Login.tsx | 2 +- src/login/pages/LoginConfigTotp.tsx | 4 ++-- src/login/pages/LoginIdpLinkConfirm.tsx | 4 ++-- src/login/pages/LoginIdpLinkEmail.tsx | 4 ++-- .../pages/LoginOauth2DeviceVerifyUserCode.tsx | 6 ++--- src/login/pages/LoginOauthGrant.tsx | 6 ++--- src/login/pages/LoginOtp.tsx | 4 ++-- src/login/pages/LoginPageExpired.tsx | 2 +- src/login/pages/LoginPassword.tsx | 4 ++-- .../pages/LoginRecoveryAuthnCodeConfig.tsx | 4 ++-- .../pages/LoginRecoveryAuthnCodeInput.tsx | 4 ++-- src/login/pages/LoginResetOtp.tsx | 4 ++-- src/login/pages/LoginResetPassword.tsx | 4 ++-- src/login/pages/LoginUpdatePassword.tsx | 4 ++-- src/login/pages/LoginUpdateProfile.tsx | 8 +++---- src/login/pages/LoginUsername.tsx | 4 ++-- src/login/pages/LoginVerifyEmail.tsx | 2 +- src/login/pages/LoginX509Info.tsx | 4 ++-- src/login/pages/LogoutConfirm.tsx | 4 ++-- src/login/pages/Register.tsx | 8 +++---- src/login/pages/SamlPostForm.tsx | 2 +- src/login/pages/SelectAuthenticator.tsx | 6 ++--- src/login/pages/Terms.tsx | 4 ++-- src/login/pages/UpdateEmail.tsx | 4 ++-- src/login/pages/WebauthnAuthenticate.tsx | 8 +++---- src/login/pages/WebauthnError.tsx | 4 ++-- src/login/pages/WebauthnRegister.tsx | 8 +++---- src/tools/Object.fromEntries.ts | 23 +++++++++++++++++++ src/tools/structuredCloneButFunctions.ts | 2 +- .../account/{kcContext.ts => KcContext.ts} | 0 .../{createPageStory.tsx => PageStory.tsx} | 11 ++++++++- stories/account/kcContextMock.ts | 13 ----------- stories/account/pages/Account.stories.tsx | 2 +- .../pages/FederatedIdentity.stories.tsx | 2 +- stories/account/pages/Log.stories.tsx | 2 +- stories/account/pages/Pasword.stories.tsx | 2 +- stories/account/pages/Sessions.stories.tsx | 2 +- stories/account/pages/Totp.stories.tsx | 2 +- stories/login/{kcContext.ts => KcContext.ts} | 0 .../{createPageStory.tsx => PageStory.tsx} | 11 ++++++++- stories/login/kcContextMock.ts | 13 ----------- stories/login/pages/Code.stories.tsx | 2 +- ...el-spec.ts => KcContext.typelevel-spec.ts} | 0 ...tMock.spec.ts => getKcContextMock.spec.ts} | 2 +- 84 files changed, 191 insertions(+), 184 deletions(-) rename src/account/{kcContext => KcContext}/KcContext.ts (100%) rename src/account/{kcContext => KcContext}/getKcContextMock.ts (100%) rename src/account/{kcContext => KcContext}/index.ts (100%) rename src/account/{kcContext => KcContext}/kcContextMocks.ts (99%) rename src/login/{kcContext => KcContext}/KcContext.ts (100%) rename src/login/{kcContext => KcContext}/getKcContextMock.ts (100%) rename src/login/{kcContext => KcContext}/index.ts (80%) rename src/login/{kcContext => KcContext}/kcContextMocks.ts (99%) create mode 100644 src/tools/Object.fromEntries.ts rename stories/account/{kcContext.ts => KcContext.ts} (100%) rename stories/account/{createPageStory.tsx => PageStory.tsx} (67%) delete mode 100644 stories/account/kcContextMock.ts rename stories/login/{kcContext.ts => KcContext.ts} (100%) rename stories/login/{createPageStory.tsx => PageStory.tsx} (67%) delete mode 100644 stories/login/kcContextMock.ts rename test/login/{kcContext.typelevel-spec.ts => KcContext.typelevel-spec.ts} (100%) rename test/login/{kcContextMock.spec.ts => getKcContextMock.spec.ts} (100%) diff --git a/package.json b/package.json index d5e978c2..09599728 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,6 @@ "react": "*" }, "dependencies": { - "minimal-polyfills": "^2.2.3", "react-markdown": "^5.0.3", "tsafe": "^1.6.6" }, diff --git a/src/account/Fallback.tsx b/src/account/Fallback.tsx index d19f3227..e8ef395c 100644 --- a/src/account/Fallback.tsx +++ b/src/account/Fallback.tsx @@ -1,9 +1,8 @@ import { lazy, Suspense } from "react"; -import type { PageProps } from "keycloakify/account/pages/PageProps"; -import type { I18n } from "keycloakify/account/i18n"; -import type { KcContext } from "./kcContext"; import { assert, type Equals } from "tsafe/assert"; -import FederatedIdentity from "./pages/FederatedIdentity"; +import type { PageProps } from "keycloakify/account/pages/PageProps"; +import type { KcContext } from "./KcContext"; +import type { I18n } from "./i18n"; const Password = lazy(() => import("keycloakify/account/pages/Password")); const Account = lazy(() => import("keycloakify/account/pages/Account")); @@ -11,6 +10,7 @@ const Sessions = lazy(() => import("keycloakify/account/pages/Sessions")); const Totp = lazy(() => import("keycloakify/account/pages/Totp")); const Applications = lazy(() => import("keycloakify/account/pages/Applications")); const Log = lazy(() => import("keycloakify/account/pages/Log")); +const FederatedIdentity = lazy(() => import("keycloakify/account/pages/FederatedIdentity")); export default function Fallback(props: PageProps) { const { kcContext, ...rest } = props; diff --git a/src/account/kcContext/KcContext.ts b/src/account/KcContext/KcContext.ts similarity index 100% rename from src/account/kcContext/KcContext.ts rename to src/account/KcContext/KcContext.ts diff --git a/src/account/kcContext/getKcContextMock.ts b/src/account/KcContext/getKcContextMock.ts similarity index 100% rename from src/account/kcContext/getKcContextMock.ts rename to src/account/KcContext/getKcContextMock.ts diff --git a/src/account/kcContext/index.ts b/src/account/KcContext/index.ts similarity index 100% rename from src/account/kcContext/index.ts rename to src/account/KcContext/index.ts diff --git a/src/account/kcContext/kcContextMocks.ts b/src/account/KcContext/kcContextMocks.ts similarity index 99% rename from src/account/kcContext/kcContextMocks.ts rename to src/account/KcContext/kcContextMocks.ts index 0331961c..14d4709c 100644 --- a/src/account/kcContext/kcContextMocks.ts +++ b/src/account/KcContext/kcContextMocks.ts @@ -1,4 +1,4 @@ -import "minimal-polyfills/Object.fromEntries"; +import "keycloakify/tools/Object.fromEntries"; import { resources_common, keycloak_resources } from "keycloakify/bin/shared/constants"; import { id } from "tsafe/id"; import type { KcContext } from "./KcContext"; diff --git a/src/account/Template.tsx b/src/account/Template.tsx index 206cebc0..2ad24715 100644 --- a/src/account/Template.tsx +++ b/src/account/Template.tsx @@ -1,12 +1,12 @@ import { useEffect } from "react"; +import { assert } from "keycloakify/tools/assert"; import { clsx } from "keycloakify/tools/clsx"; -import { type TemplateProps } from "keycloakify/account/TemplateProps"; import { useGetClassName } from "keycloakify/account/lib/useGetClassName"; import { useInsertLinkTags } from "keycloakify/tools/useInsertLinkTags"; import { useSetClassName } from "keycloakify/tools/useSetClassName"; -import type { KcContext } from "./kcContext"; +import type { TemplateProps } from "keycloakify/account/TemplateProps"; +import type { KcContext } from "./KcContext"; import type { I18n } from "./i18n"; -import { assert } from "keycloakify/tools/assert"; export default function Template(props: TemplateProps) { const { kcContext, i18n, doUseDefaultCss, active, classes, children } = props; diff --git a/src/account/TemplateProps.ts b/src/account/TemplateProps.ts index af02f2a4..5a96dc3d 100644 --- a/src/account/TemplateProps.ts +++ b/src/account/TemplateProps.ts @@ -1,5 +1,5 @@ import type { ReactNode } from "react"; -import type { KcContext } from "./kcContext"; +import type { KcContext } from "./KcContext"; import type { I18n } from "./i18n"; export type TemplateProps< diff --git a/src/account/i18n/i18n.tsx b/src/account/i18n/i18n.tsx index f4679e71..9d44a593 100644 --- a/src/account/i18n/i18n.tsx +++ b/src/account/i18n/i18n.tsx @@ -1,9 +1,9 @@ -import "minimal-polyfills/Object.fromEntries"; +import "keycloakify/tools/Object.fromEntries"; import { useEffect, useState, useRef } from "react"; import fallbackMessages from "./baseMessages/en"; import { getMessages } from "./baseMessages"; import { assert } from "tsafe/assert"; -import type { KcContext } from "../kcContext/KcContext"; +import type { KcContext } from "../KcContext"; import { Reflect } from "tsafe/Reflect"; export const fallbackLanguageTag = "en"; diff --git a/src/account/i18n/index.ts b/src/account/i18n/index.ts index 36a7e50a..98e315a1 100644 --- a/src/account/i18n/index.ts +++ b/src/account/i18n/index.ts @@ -1 +1,2 @@ export type { I18n } from "./i18n"; +export { createUseI18n } from "./i18n"; diff --git a/src/account/index.ts b/src/account/index.ts index 4ad9333e..5191a544 100644 --- a/src/account/index.ts +++ b/src/account/index.ts @@ -1,6 +1,3 @@ -export type { AccountThemePageId as PageId } from "keycloakify/bin/shared/constants"; -export { createUseI18n } from "keycloakify/account/i18n/i18n"; -export type { ExtendKcContext } from "keycloakify/account/kcContext"; -export { createGetKcContextMock } from "keycloakify/account/kcContext"; - -export type { PageProps } from "keycloakify/account/pages/PageProps"; +export type { ExtendKcContext } from "keycloakify/account/KcContext"; +export { createGetKcContextMock } from "keycloakify/account/KcContext"; +export { createUseI18n } from "keycloakify/account/i18n"; diff --git a/src/account/pages/Account.tsx b/src/account/pages/Account.tsx index 97465db0..5ee22e6e 100644 --- a/src/account/pages/Account.tsx +++ b/src/account/pages/Account.tsx @@ -1,7 +1,7 @@ import { clsx } from "keycloakify/tools/clsx"; import type { PageProps } from "keycloakify/account/pages/PageProps"; import { useGetClassName } from "keycloakify/account/lib/useGetClassName"; -import type { KcContext } from "../kcContext"; +import type { KcContext } from "../KcContext"; import type { I18n } from "../i18n"; export default function Account(props: PageProps, I18n>) { diff --git a/src/account/pages/Applications.tsx b/src/account/pages/Applications.tsx index 051fb2d1..a3cc969c 100644 --- a/src/account/pages/Applications.tsx +++ b/src/account/pages/Applications.tsx @@ -1,13 +1,9 @@ import { clsx } from "keycloakify/tools/clsx"; -import type { PageProps } from "keycloakify/account/pages/PageProps"; import { useGetClassName } from "keycloakify/account/lib/useGetClassName"; -import type { KcContext } from "../kcContext"; +import type { PageProps } from "keycloakify/account/pages/PageProps"; +import type { KcContext } from "../KcContext"; import type { I18n } from "../i18n"; -function isArrayWithEmptyObject(variable: any): boolean { - return Array.isArray(variable) && variable.length === 1 && typeof variable[0] === "object" && Object.keys(variable[0]).length === 0; -} - export default function Applications(props: PageProps, I18n>) { const { kcContext, i18n, doUseDefaultCss, classes, Template } = props; @@ -136,3 +132,7 @@ export default function Applications(props: PageProps ); } + +function isArrayWithEmptyObject(variable: any): boolean { + return Array.isArray(variable) && variable.length === 1 && typeof variable[0] === "object" && Object.keys(variable[0]).length === 0; +} diff --git a/src/account/pages/FederatedIdentity.tsx b/src/account/pages/FederatedIdentity.tsx index 91833952..f1a264b8 100644 --- a/src/account/pages/FederatedIdentity.tsx +++ b/src/account/pages/FederatedIdentity.tsx @@ -1,6 +1,6 @@ -import { PageProps } from "keycloakify/account"; -import { I18n } from "keycloakify/account/i18n"; -import { KcContext } from "keycloakify/account/kcContext"; +import type { PageProps } from "keycloakify/account/pages/PageProps"; +import type { KcContext } from "../KcContext"; +import type { I18n } from "../i18n"; export default function FederatedIdentity(props: PageProps, I18n>) { const { kcContext, i18n, doUseDefaultCss, classes, Template } = props; diff --git a/src/account/pages/Log.tsx b/src/account/pages/Log.tsx index cbec31dd..a78d485a 100644 --- a/src/account/pages/Log.tsx +++ b/src/account/pages/Log.tsx @@ -1,8 +1,8 @@ -import type { PageProps } from "keycloakify/account/pages/PageProps"; -import type { KcContext } from "../kcContext"; -import type { I18n } from "../i18n"; -import { Key } from "react"; +import type { Key } from "react"; import { useGetClassName } from "keycloakify/account/lib/useGetClassName"; +import type { PageProps } from "keycloakify/account/pages/PageProps"; +import type { I18n } from "../i18n"; +import type { KcContext } from "../KcContext"; export default function Log(props: PageProps, I18n>) { const { kcContext, i18n, doUseDefaultCss, classes, Template } = props; diff --git a/src/account/pages/PageProps.ts b/src/account/pages/PageProps.ts index 620b6992..d2345ec9 100644 --- a/src/account/pages/PageProps.ts +++ b/src/account/pages/PageProps.ts @@ -1,11 +1,11 @@ -import type { I18n } from "keycloakify/account/i18n"; import type { TemplateProps, ClassKey } from "keycloakify/account/TemplateProps"; import type { LazyOrNot } from "keycloakify/tools/LazyOrNot"; -import type { KcContext } from "keycloakify/account/kcContext"; +import type { I18n } from "../i18n"; +import type { KcContext } from "../kcContext"; -export type PageProps = { +export type PageProps = { Template: LazyOrNot<(props: TemplateProps) => JSX.Element | null>; - kcContext: NarowedKcContext; + kcContext: NarrowedKcContext; i18n: I18nExtended; doUseDefaultCss: boolean; classes?: Partial>; diff --git a/src/account/pages/Password.tsx b/src/account/pages/Password.tsx index cf6f02e1..c0e8b93b 100644 --- a/src/account/pages/Password.tsx +++ b/src/account/pages/Password.tsx @@ -1,8 +1,8 @@ import { useState } from "react"; import { clsx } from "keycloakify/tools/clsx"; -import type { PageProps } from "keycloakify/account/pages/PageProps"; import { useGetClassName } from "keycloakify/account/lib/useGetClassName"; -import type { KcContext } from "../kcContext"; +import type { PageProps } from "keycloakify/account/pages/PageProps"; +import type { KcContext } from "../KcContext"; import type { I18n } from "../i18n"; export default function Password(props: PageProps, I18n>) { diff --git a/src/account/pages/Sessions.tsx b/src/account/pages/Sessions.tsx index b97338a2..ad7584a2 100644 --- a/src/account/pages/Sessions.tsx +++ b/src/account/pages/Sessions.tsx @@ -1,7 +1,7 @@ import { clsx } from "keycloakify/tools/clsx"; -import type { PageProps } from "keycloakify/account/pages/PageProps"; import { useGetClassName } from "keycloakify/account/lib/useGetClassName"; -import type { KcContext } from "../kcContext"; +import type { PageProps } from "keycloakify/account/pages/PageProps"; +import type { KcContext } from "../KcContext"; import type { I18n } from "../i18n"; export default function Sessions(props: PageProps, I18n>) { diff --git a/src/account/pages/Totp.tsx b/src/account/pages/Totp.tsx index cd07cd60..5b5ec28b 100644 --- a/src/account/pages/Totp.tsx +++ b/src/account/pages/Totp.tsx @@ -1,7 +1,7 @@ import { clsx } from "keycloakify/tools/clsx"; -import type { PageProps } from "keycloakify/account/pages/PageProps"; import { useGetClassName } from "keycloakify/account/lib/useGetClassName"; -import type { KcContext } from "../kcContext"; +import type { PageProps } from "keycloakify/account/pages/PageProps"; +import type { KcContext } from "../KcContext"; import type { I18n } from "../i18n"; export default function Totp(props: PageProps, I18n>) { diff --git a/src/bin/keycloakify/generateSrcMainResources/readExtraPageNames.ts b/src/bin/keycloakify/generateSrcMainResources/readExtraPageNames.ts index 5d20305b..528f4b22 100644 --- a/src/bin/keycloakify/generateSrcMainResources/readExtraPageNames.ts +++ b/src/bin/keycloakify/generateSrcMainResources/readExtraPageNames.ts @@ -21,7 +21,7 @@ export function readExtraPagesNames(params: { }).filter(filePath => /\.(ts|tsx|js|jsx)$/.test(filePath)); const candidateFilePaths = filePaths.filter(filePath => - /kcContext\.[^.]+$/.test(filePath) + /[kK]cContext\.[^.]+$/.test(filePath) ); if (candidateFilePaths.length === 0) { diff --git a/src/login/Fallback.tsx b/src/login/Fallback.tsx index 90d4a266..0dc6e6f1 100644 --- a/src/login/Fallback.tsx +++ b/src/login/Fallback.tsx @@ -1,9 +1,9 @@ import { lazy, Suspense } from "react"; -import type { PageProps } from "keycloakify/login/pages/PageProps"; import { assert, type Equals } from "tsafe/assert"; -import type { I18n } from "./i18n"; -import type { KcContext } from "./kcContext"; import type { LazyOrNot } from "keycloakify/tools/LazyOrNot"; +import type { PageProps } from "keycloakify/login/pages/PageProps"; +import type { KcContext } from "./KcContext"; +import type { I18n } from "./i18n"; import type { UserProfileFormFieldsProps } from "keycloakify/login/UserProfileFormFields"; const Login = lazy(() => import("keycloakify/login/pages/Login")); diff --git a/src/login/kcContext/KcContext.ts b/src/login/KcContext/KcContext.ts similarity index 100% rename from src/login/kcContext/KcContext.ts rename to src/login/KcContext/KcContext.ts diff --git a/src/login/kcContext/getKcContextMock.ts b/src/login/KcContext/getKcContextMock.ts similarity index 100% rename from src/login/kcContext/getKcContextMock.ts rename to src/login/KcContext/getKcContextMock.ts diff --git a/src/login/kcContext/index.ts b/src/login/KcContext/index.ts similarity index 80% rename from src/login/kcContext/index.ts rename to src/login/KcContext/index.ts index 18737f02..e1b221ef 100644 --- a/src/login/kcContext/index.ts +++ b/src/login/KcContext/index.ts @@ -2,6 +2,7 @@ export type { ExtendKcContext, KcContext, Attribute, - PasswordPolicies + PasswordPolicies, + Validators } from "./KcContext"; export { createGetKcContextMock } from "./getKcContextMock"; diff --git a/src/login/kcContext/kcContextMocks.ts b/src/login/KcContext/kcContextMocks.ts similarity index 99% rename from src/login/kcContext/kcContextMocks.ts rename to src/login/KcContext/kcContextMocks.ts index a5d474df..6a48441b 100644 --- a/src/login/kcContext/kcContextMocks.ts +++ b/src/login/KcContext/kcContextMocks.ts @@ -1,4 +1,4 @@ -import "minimal-polyfills/Object.fromEntries"; +import "keycloakify/tools/Object.fromEntries"; import type { KcContext, Attribute } from "./KcContext"; import { resources_common, diff --git a/src/login/Template.tsx b/src/login/Template.tsx index 8a31fbfe..eb8d71cf 100644 --- a/src/login/Template.tsx +++ b/src/login/Template.tsx @@ -1,12 +1,12 @@ import { useEffect } from "react"; import { assert } from "keycloakify/tools/assert"; import { clsx } from "keycloakify/tools/clsx"; -import { type TemplateProps } from "keycloakify/login/TemplateProps"; +import type { TemplateProps } from "keycloakify/login/TemplateProps"; import { useGetClassName } from "keycloakify/login/lib/useGetClassName"; import { useInsertScriptTags } from "keycloakify/tools/useInsertScriptTags"; import { useInsertLinkTags } from "keycloakify/tools/useInsertLinkTags"; import { useSetClassName } from "keycloakify/tools/useSetClassName"; -import type { KcContext } from "./kcContext"; +import type { KcContext } from "./KcContext"; import type { I18n } from "./i18n"; export default function Template(props: TemplateProps) { diff --git a/src/login/TemplateProps.ts b/src/login/TemplateProps.ts index eebbae02..2837cf0e 100644 --- a/src/login/TemplateProps.ts +++ b/src/login/TemplateProps.ts @@ -1,5 +1,5 @@ import type { ReactNode } from "react"; -import type { KcContext } from "./kcContext"; +import type { KcContext } from "./KcContext"; import type { I18n } from "./i18n"; export type TemplateProps< diff --git a/src/login/UserProfileFormFields.tsx b/src/login/UserProfileFormFields.tsx index 728dca3d..4850f89d 100644 --- a/src/login/UserProfileFormFields.tsx +++ b/src/login/UserProfileFormFields.tsx @@ -1,4 +1,5 @@ import { useEffect, useReducer, Fragment } from "react"; +import { assert } from "tsafe/assert"; import type { ClassKey } from "keycloakify/login/TemplateProps"; import { useUserProfileForm, @@ -7,8 +8,7 @@ import { type FormAction, type FormFieldError } from "keycloakify/login/lib/useUserProfileForm"; -import type { Attribute } from "keycloakify/login/kcContext/KcContext"; -import { assert } from "tsafe/assert"; +import type { Attribute } from "keycloakify/login/KcContext"; import type { I18n } from "./i18n"; export type UserProfileFormFieldsProps = { diff --git a/src/login/i18n/i18n.tsx b/src/login/i18n/i18n.tsx index 5ad293cd..7b6c2fe3 100644 --- a/src/login/i18n/i18n.tsx +++ b/src/login/i18n/i18n.tsx @@ -1,9 +1,9 @@ -import "minimal-polyfills/Object.fromEntries"; +import "keycloakify/tools/Object.fromEntries"; import { useEffect, useState, useRef } from "react"; +import { assert } from "tsafe/assert"; import fallbackMessages from "./baseMessages/en"; import { getMessages } from "./baseMessages"; -import { assert } from "tsafe/assert"; -import type { KcContext } from "../kcContext/KcContext"; +import type { KcContext } from "../KcContext"; import { Reflect } from "tsafe/Reflect"; export const fallbackLanguageTag = "en"; diff --git a/src/login/i18n/index.ts b/src/login/i18n/index.ts index 36a7e50a..5cb8d3d0 100644 --- a/src/login/i18n/index.ts +++ b/src/login/i18n/index.ts @@ -1 +1,2 @@ -export type { I18n } from "./i18n"; +export type { I18n, MessageKey } from "./i18n"; +export { createUseI18n, fallbackLanguageTag } from "./i18n"; diff --git a/src/login/index.ts b/src/login/index.ts index 9e1c7ba0..2290f491 100644 --- a/src/login/index.ts +++ b/src/login/index.ts @@ -1,10 +1,4 @@ +export type { ExtendKcContext, Attribute } from "keycloakify/login/KcContext"; +export { createGetKcContextMock } from "keycloakify/login/KcContext"; export { useDownloadTerms } from "keycloakify/login/lib/useDownloadTerms"; -export { createUseI18n } from "keycloakify/login/i18n/i18n"; -export type { - ExtendKcContext, - Attribute, - PasswordPolicies -} from "keycloakify/login/kcContext"; -export { createGetKcContextMock } from "keycloakify/login/kcContext"; - -export type { PageProps } from "keycloakify/login/pages/PageProps"; +export { createUseI18n } from "keycloakify/login/i18n"; diff --git a/src/login/lib/useDownloadTerms.ts b/src/login/lib/useDownloadTerms.ts index c1b60e0c..01839927 100644 --- a/src/login/lib/useDownloadTerms.ts +++ b/src/login/lib/useDownloadTerms.ts @@ -1,11 +1,11 @@ -import { fallbackLanguageTag } from "keycloakify/login/i18n/i18n"; +import { fallbackLanguageTag } from "keycloakify/login/i18n"; import { assert } from "tsafe/assert"; import { createStatefulObservable, useRerenderOnChange } from "keycloakify/tools/StatefulObservable"; -import { KcContext } from "../kcContext"; import { useOnFistMount } from "keycloakify/tools/useOnFirstMount"; +import { KcContext } from "../KcContext"; const obsTermsMarkdown = createStatefulObservable(() => undefined); diff --git a/src/login/lib/useUserProfileForm.tsx b/src/login/lib/useUserProfileForm.tsx index f2b35a80..aad1403a 100644 --- a/src/login/lib/useUserProfileForm.tsx +++ b/src/login/lib/useUserProfileForm.tsx @@ -1,15 +1,14 @@ import "keycloakify/tools/Array.prototype.every"; import { useMemo, useReducer, useEffect, Fragment, type Dispatch } from "react"; +import { assert, type Equals } from "tsafe/assert"; import { id } from "tsafe/id"; -import type { MessageKey } from "keycloakify/login/i18n/i18n"; -import type { Attribute, Validators } from "keycloakify/login/kcContext/KcContext"; +import { structuredCloneButFunctions } from "keycloakify/tools/structuredCloneButFunctions"; import { useConstCallback } from "keycloakify/tools/useConstCallback"; import { emailRegexp } from "keycloakify/tools/emailRegExp"; -import type { KcContext, PasswordPolicies } from "keycloakify/login/kcContext/KcContext"; -import { assert, type Equals } from "tsafe/assert"; import { formatNumber } from "keycloakify/tools/formatNumber"; import { useInsertScriptTags } from "keycloakify/tools/useInsertScriptTags"; -import { structuredCloneButFunctions } from "keycloakify/tools/structuredCloneButFunctions"; +import type { KcContext, PasswordPolicies, Attribute, Validators } from "keycloakify/login/KcContext"; +import type { MessageKey } from "keycloakify/login/i18n"; import type { I18n } from "../i18n"; export type FormFieldError = { diff --git a/src/login/pages/Code.tsx b/src/login/pages/Code.tsx index 4b797d51..c4e8fa9f 100644 --- a/src/login/pages/Code.tsx +++ b/src/login/pages/Code.tsx @@ -1,6 +1,6 @@ -import type { PageProps } from "keycloakify/login/pages/PageProps"; import { useGetClassName } from "keycloakify/login/lib/useGetClassName"; -import type { KcContext } from "../kcContext"; +import type { PageProps } from "keycloakify/login/pages/PageProps"; +import type { KcContext } from "../KcContext"; import type { I18n } from "../i18n"; export default function Code(props: PageProps, I18n>) { diff --git a/src/login/pages/DeleteAccountConfirm.tsx b/src/login/pages/DeleteAccountConfirm.tsx index 2f02f623..9c4ee24e 100644 --- a/src/login/pages/DeleteAccountConfirm.tsx +++ b/src/login/pages/DeleteAccountConfirm.tsx @@ -1,7 +1,7 @@ import { clsx } from "keycloakify/tools/clsx"; -import type { PageProps } from "keycloakify/login/pages/PageProps"; import { useGetClassName } from "keycloakify/login/lib/useGetClassName"; -import type { KcContext } from "../kcContext"; +import type { PageProps } from "keycloakify/login/pages/PageProps"; +import type { KcContext } from "../KcContext"; import type { I18n } from "../i18n"; export default function DeleteAccountConfirm(props: PageProps, I18n>) { diff --git a/src/login/pages/DeleteCredential.tsx b/src/login/pages/DeleteCredential.tsx index 799dee7c..7f5726ba 100644 --- a/src/login/pages/DeleteCredential.tsx +++ b/src/login/pages/DeleteCredential.tsx @@ -1,8 +1,8 @@ import { clsx } from "keycloakify/tools/clsx"; -import type { PageProps } from "keycloakify/login/pages/PageProps"; -import type { KcContext } from "../kcContext"; -import type { I18n } from "../i18n"; import { useGetClassName } from "keycloakify/login/lib/useGetClassName"; +import type { PageProps } from "keycloakify/login/pages/PageProps"; +import type { KcContext } from "../KcContext"; +import type { I18n } from "../i18n"; export default function DeleteCredential(props: PageProps, I18n>) { const { kcContext, i18n, doUseDefaultCss, Template, classes } = props; diff --git a/src/login/pages/Error.tsx b/src/login/pages/Error.tsx index c5bc69c6..f54b95c3 100644 --- a/src/login/pages/Error.tsx +++ b/src/login/pages/Error.tsx @@ -1,5 +1,5 @@ import type { PageProps } from "keycloakify/login/pages/PageProps"; -import type { KcContext } from "../kcContext"; +import type { KcContext } from "../KcContext"; import type { I18n } from "../i18n"; export default function Error(props: PageProps, I18n>) { diff --git a/src/login/pages/FrontchannelLogout.tsx b/src/login/pages/FrontchannelLogout.tsx index 29af6748..e67897b2 100644 --- a/src/login/pages/FrontchannelLogout.tsx +++ b/src/login/pages/FrontchannelLogout.tsx @@ -1,6 +1,6 @@ import { useEffect } from "react"; import type { PageProps } from "keycloakify/login/pages/PageProps"; -import type { KcContext } from "../kcContext"; +import type { KcContext } from "../KcContext"; import type { I18n } from "../i18n"; export default function FrontchannelLogout(props: PageProps, I18n>) { diff --git a/src/login/pages/IdpReviewUserProfile.tsx b/src/login/pages/IdpReviewUserProfile.tsx index 6518b5ba..b864746f 100644 --- a/src/login/pages/IdpReviewUserProfile.tsx +++ b/src/login/pages/IdpReviewUserProfile.tsx @@ -1,10 +1,10 @@ import { useState } from "react"; import { clsx } from "keycloakify/tools/clsx"; -import type { PageProps } from "keycloakify/login/pages/PageProps"; -import { useGetClassName } from "keycloakify/login/lib/useGetClassName"; import type { LazyOrNot } from "keycloakify/tools/LazyOrNot"; +import { useGetClassName } from "keycloakify/login/lib/useGetClassName"; +import type { PageProps } from "keycloakify/login/pages/PageProps"; import type { UserProfileFormFieldsProps } from "keycloakify/login/UserProfileFormFields"; -import type { KcContext } from "../kcContext"; +import type { KcContext } from "../KcContext"; import type { I18n } from "../i18n"; type IdpReviewUserProfileProps = PageProps, I18n> & { diff --git a/src/login/pages/Info.tsx b/src/login/pages/Info.tsx index 7892ffab..58699f36 100644 --- a/src/login/pages/Info.tsx +++ b/src/login/pages/Info.tsx @@ -1,6 +1,6 @@ import { assert } from "keycloakify/tools/assert"; import type { PageProps } from "keycloakify/login/pages/PageProps"; -import type { KcContext } from "../kcContext"; +import type { KcContext } from "../KcContext"; import type { I18n } from "../i18n"; export default function Info(props: PageProps, I18n>) { diff --git a/src/login/pages/Login.tsx b/src/login/pages/Login.tsx index d304a16f..df875993 100644 --- a/src/login/pages/Login.tsx +++ b/src/login/pages/Login.tsx @@ -3,7 +3,7 @@ import { assert } from "tsafe/assert"; import { clsx } from "keycloakify/tools/clsx"; import type { PageProps } from "keycloakify/login/pages/PageProps"; import { useGetClassName } from "keycloakify/login/lib/useGetClassName"; -import type { KcContext } from "../kcContext"; +import type { KcContext } from "../KcContext"; import type { I18n } from "../i18n"; export default function Login(props: PageProps, I18n>) { diff --git a/src/login/pages/LoginConfigTotp.tsx b/src/login/pages/LoginConfigTotp.tsx index 80cff772..166d45dd 100644 --- a/src/login/pages/LoginConfigTotp.tsx +++ b/src/login/pages/LoginConfigTotp.tsx @@ -1,7 +1,7 @@ import { clsx } from "keycloakify/tools/clsx"; -import type { PageProps } from "keycloakify/login/pages/PageProps"; import { useGetClassName } from "keycloakify/login/lib/useGetClassName"; -import type { KcContext } from "../kcContext"; +import type { PageProps } from "keycloakify/login/pages/PageProps"; +import type { KcContext } from "../KcContext"; import type { I18n } from "../i18n"; export default function LoginConfigTotp(props: PageProps, I18n>) { diff --git a/src/login/pages/LoginIdpLinkConfirm.tsx b/src/login/pages/LoginIdpLinkConfirm.tsx index f1f2b3e8..1c4f8def 100644 --- a/src/login/pages/LoginIdpLinkConfirm.tsx +++ b/src/login/pages/LoginIdpLinkConfirm.tsx @@ -1,7 +1,7 @@ import { clsx } from "keycloakify/tools/clsx"; -import type { PageProps } from "keycloakify/login/pages/PageProps"; import { useGetClassName } from "keycloakify/login/lib/useGetClassName"; -import type { KcContext } from "../kcContext"; +import type { PageProps } from "keycloakify/login/pages/PageProps"; +import type { KcContext } from "../KcContext"; import type { I18n } from "../i18n"; export default function LoginIdpLinkConfirm(props: PageProps, I18n>) { diff --git a/src/login/pages/LoginIdpLinkEmail.tsx b/src/login/pages/LoginIdpLinkEmail.tsx index a4ac98c1..fd3d6773 100644 --- a/src/login/pages/LoginIdpLinkEmail.tsx +++ b/src/login/pages/LoginIdpLinkEmail.tsx @@ -1,6 +1,6 @@ -import type { KcContext } from "keycloakify/login/kcContext"; import type { PageProps } from "keycloakify/login/pages/PageProps"; -import type { I18n } from "keycloakify/login/i18n"; +import type { KcContext } from "../KcContext"; +import type { I18n } from "../i18n"; export default function LoginIdpLinkEmail(props: PageProps, I18n>) { const { kcContext, i18n, doUseDefaultCss, Template, classes } = props; diff --git a/src/login/pages/LoginOauth2DeviceVerifyUserCode.tsx b/src/login/pages/LoginOauth2DeviceVerifyUserCode.tsx index f3adf221..cc0e27b3 100644 --- a/src/login/pages/LoginOauth2DeviceVerifyUserCode.tsx +++ b/src/login/pages/LoginOauth2DeviceVerifyUserCode.tsx @@ -1,8 +1,8 @@ import { clsx } from "keycloakify/tools/clsx"; -import { I18n } from "../i18n"; -import { KcContext } from "../kcContext"; import { useGetClassName } from "keycloakify/login/lib/useGetClassName"; -import { PageProps } from "./PageProps"; +import { PageProps } from "keycloakify/login/pages/PageProps"; +import { I18n } from "../i18n"; +import { KcContext } from "../KcContext"; export default function LoginOauth2DeviceVerifyUserCode( props: PageProps, I18n> diff --git a/src/login/pages/LoginOauthGrant.tsx b/src/login/pages/LoginOauthGrant.tsx index a3935055..750ba201 100644 --- a/src/login/pages/LoginOauthGrant.tsx +++ b/src/login/pages/LoginOauthGrant.tsx @@ -1,8 +1,8 @@ import { clsx } from "keycloakify/tools/clsx"; -import { PageProps } from "./PageProps"; -import { KcContext } from "../kcContext"; -import { I18n } from "../i18n"; import { useGetClassName } from "keycloakify/login/lib/useGetClassName"; +import { PageProps } from "keycloakify/login/pages/PageProps"; +import { KcContext } from "../KcContext"; +import { I18n } from "../i18n"; export default function LoginOauthGrant(props: PageProps, I18n>) { const { kcContext, i18n, doUseDefaultCss, classes, Template } = props; diff --git a/src/login/pages/LoginOtp.tsx b/src/login/pages/LoginOtp.tsx index 8dbe637f..58723594 100644 --- a/src/login/pages/LoginOtp.tsx +++ b/src/login/pages/LoginOtp.tsx @@ -1,8 +1,8 @@ import { Fragment } from "react"; import { clsx } from "keycloakify/tools/clsx"; -import type { PageProps } from "keycloakify/login/pages/PageProps"; import { useGetClassName } from "keycloakify/login/lib/useGetClassName"; -import type { KcContext } from "../kcContext"; +import type { PageProps } from "keycloakify/login/pages/PageProps"; +import type { KcContext } from "../KcContext"; import type { I18n } from "../i18n"; export default function LoginOtp(props: PageProps, I18n>) { diff --git a/src/login/pages/LoginPageExpired.tsx b/src/login/pages/LoginPageExpired.tsx index 48f5a155..6950cd12 100644 --- a/src/login/pages/LoginPageExpired.tsx +++ b/src/login/pages/LoginPageExpired.tsx @@ -1,5 +1,5 @@ import type { PageProps } from "keycloakify/login/pages/PageProps"; -import type { KcContext } from "../kcContext"; +import type { KcContext } from "../KcContext"; import type { I18n } from "../i18n"; export default function LoginPageExpired(props: PageProps, I18n>) { diff --git a/src/login/pages/LoginPassword.tsx b/src/login/pages/LoginPassword.tsx index 0763750e..11528cec 100644 --- a/src/login/pages/LoginPassword.tsx +++ b/src/login/pages/LoginPassword.tsx @@ -1,9 +1,9 @@ import { useState, useEffect, useReducer } from "react"; import { clsx } from "keycloakify/tools/clsx"; import { assert } from "tsafe/assert"; -import type { PageProps } from "keycloakify/login/pages/PageProps"; import { useGetClassName } from "keycloakify/login/lib/useGetClassName"; -import type { KcContext } from "../kcContext"; +import type { PageProps } from "keycloakify/login/pages/PageProps"; +import type { KcContext } from "../KcContext"; import type { I18n } from "../i18n"; export default function LoginPassword(props: PageProps, I18n>) { diff --git a/src/login/pages/LoginRecoveryAuthnCodeConfig.tsx b/src/login/pages/LoginRecoveryAuthnCodeConfig.tsx index 1d4f9c12..2dda8894 100644 --- a/src/login/pages/LoginRecoveryAuthnCodeConfig.tsx +++ b/src/login/pages/LoginRecoveryAuthnCodeConfig.tsx @@ -1,9 +1,9 @@ import { useEffect } from "react"; import { clsx } from "keycloakify/tools/clsx"; -import type { PageProps } from "keycloakify/login/pages/PageProps"; import { useGetClassName } from "keycloakify/login/lib/useGetClassName"; import { useInsertScriptTags } from "keycloakify/tools/useInsertScriptTags"; -import type { KcContext } from "../kcContext"; +import type { PageProps } from "keycloakify/login/pages/PageProps"; +import type { KcContext } from "../KcContext"; import type { I18n } from "../i18n"; export default function LoginRecoveryAuthnCodeConfig(props: PageProps, I18n>) { diff --git a/src/login/pages/LoginRecoveryAuthnCodeInput.tsx b/src/login/pages/LoginRecoveryAuthnCodeInput.tsx index b18d5904..94493787 100644 --- a/src/login/pages/LoginRecoveryAuthnCodeInput.tsx +++ b/src/login/pages/LoginRecoveryAuthnCodeInput.tsx @@ -1,7 +1,7 @@ import { clsx } from "keycloakify/tools/clsx"; -import type { PageProps } from "keycloakify/login/pages/PageProps"; import { useGetClassName } from "keycloakify/login/lib/useGetClassName"; -import type { KcContext } from "../kcContext"; +import type { PageProps } from "keycloakify/login/pages/PageProps"; +import type { KcContext } from "../KcContext"; import type { I18n } from "../i18n"; export default function LoginRecoveryAuthnCodeInput(props: PageProps, I18n>) { diff --git a/src/login/pages/LoginResetOtp.tsx b/src/login/pages/LoginResetOtp.tsx index 94de40b9..8dda78fd 100644 --- a/src/login/pages/LoginResetOtp.tsx +++ b/src/login/pages/LoginResetOtp.tsx @@ -1,8 +1,8 @@ import { Fragment } from "react"; import { clsx } from "keycloakify/tools/clsx"; -import type { PageProps } from "keycloakify/login/pages/PageProps"; import { useGetClassName } from "keycloakify/login/lib/useGetClassName"; -import type { KcContext } from "../kcContext"; +import type { PageProps } from "keycloakify/login/pages/PageProps"; +import type { KcContext } from "../KcContext"; import type { I18n } from "../i18n"; export default function LoginResetOtp(props: PageProps, I18n>) { diff --git a/src/login/pages/LoginResetPassword.tsx b/src/login/pages/LoginResetPassword.tsx index b86f9437..cb26ab70 100644 --- a/src/login/pages/LoginResetPassword.tsx +++ b/src/login/pages/LoginResetPassword.tsx @@ -1,7 +1,7 @@ import { clsx } from "keycloakify/tools/clsx"; -import type { PageProps } from "keycloakify/login/pages/PageProps"; import { useGetClassName } from "keycloakify/login/lib/useGetClassName"; -import type { KcContext } from "../kcContext"; +import type { PageProps } from "keycloakify/login/pages/PageProps"; +import type { KcContext } from "../KcContext"; import type { I18n } from "../i18n"; export default function LoginResetPassword(props: PageProps, I18n>) { diff --git a/src/login/pages/LoginUpdatePassword.tsx b/src/login/pages/LoginUpdatePassword.tsx index 23c002da..42a9d27a 100644 --- a/src/login/pages/LoginUpdatePassword.tsx +++ b/src/login/pages/LoginUpdatePassword.tsx @@ -1,9 +1,9 @@ import { useEffect, useReducer } from "react"; import { clsx } from "keycloakify/tools/clsx"; import { assert } from "tsafe/assert"; -import type { PageProps } from "keycloakify/login/pages/PageProps"; import { useGetClassName } from "keycloakify/login/lib/useGetClassName"; -import type { KcContext } from "../kcContext"; +import type { PageProps } from "keycloakify/login/pages/PageProps"; +import type { KcContext } from "../KcContext"; import type { I18n } from "../i18n"; export default function LoginUpdatePassword(props: PageProps, I18n>) { diff --git a/src/login/pages/LoginUpdateProfile.tsx b/src/login/pages/LoginUpdateProfile.tsx index 3b5ba1b7..8cf4d825 100644 --- a/src/login/pages/LoginUpdateProfile.tsx +++ b/src/login/pages/LoginUpdateProfile.tsx @@ -1,11 +1,11 @@ import { useState } from "react"; import { clsx } from "keycloakify/tools/clsx"; -import type { PageProps } from "keycloakify/login/pages/PageProps"; -import { useGetClassName } from "keycloakify/login/lib/useGetClassName"; -import type { KcContext } from "../kcContext"; -import type { I18n } from "../i18n"; import type { LazyOrNot } from "keycloakify/tools/LazyOrNot"; +import { useGetClassName } from "keycloakify/login/lib/useGetClassName"; import type { UserProfileFormFieldsProps } from "keycloakify/login/UserProfileFormFields"; +import type { PageProps } from "keycloakify/login/pages/PageProps"; +import type { KcContext } from "../KcContext"; +import type { I18n } from "../i18n"; type LoginUpdateProfileProps = PageProps, I18n> & { UserProfileFormFields: LazyOrNot<(props: UserProfileFormFieldsProps) => JSX.Element>; diff --git a/src/login/pages/LoginUsername.tsx b/src/login/pages/LoginUsername.tsx index 37c0e33f..b2d0d2b4 100644 --- a/src/login/pages/LoginUsername.tsx +++ b/src/login/pages/LoginUsername.tsx @@ -1,8 +1,8 @@ import { useState } from "react"; import { clsx } from "keycloakify/tools/clsx"; -import type { PageProps } from "keycloakify/login/pages/PageProps"; import { useGetClassName } from "keycloakify/login/lib/useGetClassName"; -import type { KcContext } from "../kcContext"; +import type { PageProps } from "keycloakify/login/pages/PageProps"; +import type { KcContext } from "../KcContext"; import type { I18n } from "../i18n"; export default function LoginUsername(props: PageProps, I18n>) { diff --git a/src/login/pages/LoginVerifyEmail.tsx b/src/login/pages/LoginVerifyEmail.tsx index d618cc30..8abee5fa 100644 --- a/src/login/pages/LoginVerifyEmail.tsx +++ b/src/login/pages/LoginVerifyEmail.tsx @@ -1,5 +1,5 @@ import type { PageProps } from "keycloakify/login/pages/PageProps"; -import type { KcContext } from "../kcContext"; +import type { KcContext } from "../KcContext"; import type { I18n } from "../i18n"; export default function LoginVerifyEmail(props: PageProps, I18n>) { diff --git a/src/login/pages/LoginX509Info.tsx b/src/login/pages/LoginX509Info.tsx index 460ffc67..5188e19f 100644 --- a/src/login/pages/LoginX509Info.tsx +++ b/src/login/pages/LoginX509Info.tsx @@ -1,7 +1,7 @@ import { clsx } from "keycloakify/tools/clsx"; -import type { PageProps } from "keycloakify/login/pages/PageProps"; import { useGetClassName } from "keycloakify/login/lib/useGetClassName"; -import type { KcContext } from "../kcContext"; +import type { PageProps } from "keycloakify/login/pages/PageProps"; +import type { KcContext } from "../KcContext"; import type { I18n } from "../i18n"; export default function LoginX509Info(props: PageProps, I18n>) { diff --git a/src/login/pages/LogoutConfirm.tsx b/src/login/pages/LogoutConfirm.tsx index bc2d8d1c..7caddfb2 100644 --- a/src/login/pages/LogoutConfirm.tsx +++ b/src/login/pages/LogoutConfirm.tsx @@ -1,7 +1,7 @@ import { clsx } from "keycloakify/tools/clsx"; -import type { PageProps } from "keycloakify/login/pages/PageProps"; import { useGetClassName } from "keycloakify/login/lib/useGetClassName"; -import type { KcContext } from "../kcContext"; +import type { PageProps } from "keycloakify/login/pages/PageProps"; +import type { KcContext } from "../KcContext"; import type { I18n } from "../i18n"; export default function LogoutConfirm(props: PageProps, I18n>) { diff --git a/src/login/pages/Register.tsx b/src/login/pages/Register.tsx index 90c71b88..7518b219 100644 --- a/src/login/pages/Register.tsx +++ b/src/login/pages/Register.tsx @@ -1,12 +1,12 @@ import { useState } from "react"; import { clsx } from "keycloakify/tools/clsx"; -import type { PageProps } from "keycloakify/login/pages/PageProps"; -import { useGetClassName } from "keycloakify/login/lib/useGetClassName"; +import { Markdown } from "keycloakify/tools/Markdown"; import type { LazyOrNot } from "keycloakify/tools/LazyOrNot"; import { useTermsMarkdown } from "keycloakify/login/lib/useDownloadTerms"; +import { useGetClassName } from "keycloakify/login/lib/useGetClassName"; import type { UserProfileFormFieldsProps } from "keycloakify/login/UserProfileFormFields"; -import { Markdown } from "keycloakify/tools/Markdown"; -import type { KcContext } from "../kcContext"; +import type { PageProps } from "keycloakify/login/pages/PageProps"; +import type { KcContext } from "../KcContext"; import type { I18n } from "../i18n"; type RegisterProps = PageProps, I18n> & { diff --git a/src/login/pages/SamlPostForm.tsx b/src/login/pages/SamlPostForm.tsx index 8e05136d..b408bf92 100644 --- a/src/login/pages/SamlPostForm.tsx +++ b/src/login/pages/SamlPostForm.tsx @@ -1,6 +1,6 @@ import { useEffect, useState } from "react"; import type { PageProps } from "keycloakify/login/pages/PageProps"; -import type { KcContext } from "../kcContext"; +import type { KcContext } from "../KcContext"; import type { I18n } from "../i18n"; export default function SamlPostForm(props: PageProps, I18n>) { diff --git a/src/login/pages/SelectAuthenticator.tsx b/src/login/pages/SelectAuthenticator.tsx index 22d10a1b..3129111f 100644 --- a/src/login/pages/SelectAuthenticator.tsx +++ b/src/login/pages/SelectAuthenticator.tsx @@ -1,8 +1,8 @@ import { clsx } from "keycloakify/tools/clsx"; -import type { PageProps } from "keycloakify/login/pages/PageProps"; import { useGetClassName } from "keycloakify/login/lib/useGetClassName"; -import type { KcContext } from "keycloakify/login/kcContext"; -import type { I18n } from "keycloakify/login/i18n"; +import type { PageProps } from "keycloakify/login/pages/PageProps"; +import type { KcContext } from "../KcContext"; +import type { I18n } from "../i18n"; export default function SelectAuthenticator(props: PageProps, I18n>) { const { kcContext, i18n, doUseDefaultCss, Template, classes } = props; diff --git a/src/login/pages/Terms.tsx b/src/login/pages/Terms.tsx index 723d3ed3..52bf2fb0 100644 --- a/src/login/pages/Terms.tsx +++ b/src/login/pages/Terms.tsx @@ -1,9 +1,9 @@ import { clsx } from "keycloakify/tools/clsx"; import { Markdown } from "keycloakify/tools/Markdown"; -import type { PageProps } from "keycloakify/login/pages/PageProps"; import { useGetClassName } from "keycloakify/login/lib/useGetClassName"; import { useTermsMarkdown } from "keycloakify/login/lib/useDownloadTerms"; -import type { KcContext } from "../kcContext"; +import type { PageProps } from "keycloakify/login/pages/PageProps"; +import type { KcContext } from "../KcContext"; import type { I18n } from "../i18n"; export default function Terms(props: PageProps, I18n>) { diff --git a/src/login/pages/UpdateEmail.tsx b/src/login/pages/UpdateEmail.tsx index da00e0d8..0b5a96d4 100644 --- a/src/login/pages/UpdateEmail.tsx +++ b/src/login/pages/UpdateEmail.tsx @@ -1,10 +1,10 @@ import { useState } from "react"; import { clsx } from "keycloakify/tools/clsx"; import type { LazyOrNot } from "keycloakify/tools/LazyOrNot"; +import { useGetClassName } from "keycloakify/login/lib/useGetClassName"; import type { UserProfileFormFieldsProps } from "keycloakify/login/UserProfileFormFields"; import type { PageProps } from "keycloakify/login/pages/PageProps"; -import { useGetClassName } from "keycloakify/login/lib/useGetClassName"; -import type { KcContext } from "../kcContext"; +import type { KcContext } from "../KcContext"; import type { I18n } from "../i18n"; type UpdateEmailProps = PageProps, I18n> & { diff --git a/src/login/pages/WebauthnAuthenticate.tsx b/src/login/pages/WebauthnAuthenticate.tsx index 6471c94c..b6366c57 100644 --- a/src/login/pages/WebauthnAuthenticate.tsx +++ b/src/login/pages/WebauthnAuthenticate.tsx @@ -1,10 +1,10 @@ import { useEffect, Fragment } from "react"; -import { clsx } from "keycloakify/tools/clsx"; -import type { PageProps } from "keycloakify/login/pages/PageProps"; -import { useGetClassName } from "keycloakify/login/lib/useGetClassName"; import { assert } from "tsafe/assert"; +import { clsx } from "keycloakify/tools/clsx"; import { useInsertScriptTags } from "keycloakify/tools/useInsertScriptTags"; -import type { KcContext } from "../kcContext"; +import { useGetClassName } from "keycloakify/login/lib/useGetClassName"; +import type { PageProps } from "keycloakify/login/pages/PageProps"; +import type { KcContext } from "../KcContext"; import type { I18n } from "../i18n"; export default function WebauthnAuthenticate(props: PageProps, I18n>) { diff --git a/src/login/pages/WebauthnError.tsx b/src/login/pages/WebauthnError.tsx index 7ddc5fd7..db9f872f 100644 --- a/src/login/pages/WebauthnError.tsx +++ b/src/login/pages/WebauthnError.tsx @@ -1,7 +1,7 @@ -import type { PageProps } from "keycloakify/login/pages/PageProps"; import { clsx } from "keycloakify/tools/clsx"; import { useGetClassName } from "keycloakify/login/lib/useGetClassName"; -import type { KcContext } from "../kcContext"; +import type { PageProps } from "keycloakify/login/pages/PageProps"; +import type { KcContext } from "../KcContext"; import type { I18n } from "../i18n"; export default function WebauthnError(props: PageProps, I18n>) { diff --git a/src/login/pages/WebauthnRegister.tsx b/src/login/pages/WebauthnRegister.tsx index 8fa8cf28..658105b7 100644 --- a/src/login/pages/WebauthnRegister.tsx +++ b/src/login/pages/WebauthnRegister.tsx @@ -1,10 +1,10 @@ import { useEffect } from "react"; -import { clsx } from "keycloakify/tools/clsx"; -import type { PageProps } from "keycloakify/login/pages/PageProps"; -import { useGetClassName } from "keycloakify/login/lib/useGetClassName"; import { assert } from "tsafe/assert"; +import { clsx } from "keycloakify/tools/clsx"; +import { useGetClassName } from "keycloakify/login/lib/useGetClassName"; import { useInsertScriptTags } from "keycloakify/tools/useInsertScriptTags"; -import type { KcContext } from "../kcContext"; +import type { PageProps } from "keycloakify/login/pages/PageProps"; +import type { KcContext } from "../KcContext"; import type { I18n } from "../i18n"; export default function WebauthnRegister(props: PageProps, I18n>) { diff --git a/src/tools/Object.fromEntries.ts b/src/tools/Object.fromEntries.ts new file mode 100644 index 00000000..a23ea703 --- /dev/null +++ b/src/tools/Object.fromEntries.ts @@ -0,0 +1,23 @@ +if (!(Object as any).fromEntries) { + Object.defineProperty(Object, "fromEntries", { + value: function (entries: any) { + if (!entries || !entries[Symbol.iterator]) { + throw new Error( + "Object.fromEntries() requires a single iterable argument" + ); + } + + const o: any = {}; + + Object.keys(entries).forEach(key => { + const [k, v] = entries[key]; + + o[k] = v; + }); + + return o; + } + }); +} + +export {}; diff --git a/src/tools/structuredCloneButFunctions.ts b/src/tools/structuredCloneButFunctions.ts index cc740b6e..86b40c56 100644 --- a/src/tools/structuredCloneButFunctions.ts +++ b/src/tools/structuredCloneButFunctions.ts @@ -1,4 +1,4 @@ -import "minimal-polyfills/Object.fromEntries"; +import "keycloakify/tools/Object.fromEntries"; /** * Functionally equivalent to structuredClone but diff --git a/stories/account/kcContext.ts b/stories/account/KcContext.ts similarity index 100% rename from stories/account/kcContext.ts rename to stories/account/KcContext.ts diff --git a/stories/account/createPageStory.tsx b/stories/account/PageStory.tsx similarity index 67% rename from stories/account/createPageStory.tsx rename to stories/account/PageStory.tsx index faf98f8a..6b4cfa87 100644 --- a/stories/account/createPageStory.tsx +++ b/stories/account/PageStory.tsx @@ -1,8 +1,17 @@ import React from "react"; import type { KcContext } from "./kcContext"; -import { getKcContextMock } from "./kcContextMock"; import KcApp from "./KcApp"; import type { DeepPartial } from "../../dist/tools/DeepPartial"; +import { createGetKcContextMock } from "../../dist/account"; +import type { KcContextExtraProperties, KcContextExtraPropertiesPerPage } from "./kcContext"; + +const kcContextExtraProperties: KcContextExtraProperties = {}; +const kcContextExtraPropertiesPerPage: KcContextExtraPropertiesPerPage = {}; + +export const { getKcContextMock } = createGetKcContextMock({ + kcContextExtraProperties, + kcContextExtraPropertiesPerPage +}); export function createPageStory(params: { pageId: PageId }) { const { pageId } = params; diff --git a/stories/account/kcContextMock.ts b/stories/account/kcContextMock.ts deleted file mode 100644 index 88069124..00000000 --- a/stories/account/kcContextMock.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { createGetKcContextMock } from "../../dist/account"; -import type { - KcContextExtraProperties, - KcContextExtraPropertiesPerPage -} from "./kcContext"; - -const kcContextExtraProperties: KcContextExtraProperties = {}; -const kcContextExtraPropertiesPerPage: KcContextExtraPropertiesPerPage = {}; - -export const { getKcContextMock } = createGetKcContextMock({ - kcContextExtraProperties, - kcContextExtraPropertiesPerPage -}); diff --git a/stories/account/pages/Account.stories.tsx b/stories/account/pages/Account.stories.tsx index 8e4b1aee..f59417da 100644 --- a/stories/account/pages/Account.stories.tsx +++ b/stories/account/pages/Account.stories.tsx @@ -1,6 +1,6 @@ import React from "react"; import type { Meta, StoryObj } from "@storybook/react"; -import { createPageStory, parameters } from "../createPageStory"; +import { createPageStory, parameters } from "../PageStory"; const pageId = "account.ftl"; diff --git a/stories/account/pages/FederatedIdentity.stories.tsx b/stories/account/pages/FederatedIdentity.stories.tsx index b583c709..707017ea 100644 --- a/stories/account/pages/FederatedIdentity.stories.tsx +++ b/stories/account/pages/FederatedIdentity.stories.tsx @@ -1,6 +1,6 @@ import React from "react"; import type { Meta, StoryObj } from "@storybook/react"; -import { createPageStory, parameters } from "../createPageStory"; +import { createPageStory, parameters } from "../PageStory"; const pageId = "federatedIdentity.ftl"; diff --git a/stories/account/pages/Log.stories.tsx b/stories/account/pages/Log.stories.tsx index 90883914..92b42b90 100644 --- a/stories/account/pages/Log.stories.tsx +++ b/stories/account/pages/Log.stories.tsx @@ -1,6 +1,6 @@ import React from "react"; import type { Meta, StoryObj } from "@storybook/react"; -import { createPageStory, parameters } from "../createPageStory"; +import { createPageStory, parameters } from "../PageStory"; const pageId = "log.ftl"; diff --git a/stories/account/pages/Pasword.stories.tsx b/stories/account/pages/Pasword.stories.tsx index a8619fc0..ed66b159 100644 --- a/stories/account/pages/Pasword.stories.tsx +++ b/stories/account/pages/Pasword.stories.tsx @@ -1,6 +1,6 @@ import React from "react"; import type { Meta, StoryObj } from "@storybook/react"; -import { createPageStory, parameters } from "../createPageStory"; +import { createPageStory, parameters } from "../PageStory"; const pageId = "password.ftl"; diff --git a/stories/account/pages/Sessions.stories.tsx b/stories/account/pages/Sessions.stories.tsx index 52e22594..db5a4766 100644 --- a/stories/account/pages/Sessions.stories.tsx +++ b/stories/account/pages/Sessions.stories.tsx @@ -1,6 +1,6 @@ import React from "react"; import type { Meta, StoryObj } from "@storybook/react"; -import { createPageStory, parameters } from "../createPageStory"; +import { createPageStory, parameters } from "../PageStory"; const pageId = "sessions.ftl"; diff --git a/stories/account/pages/Totp.stories.tsx b/stories/account/pages/Totp.stories.tsx index 0cc813f1..9c4c59cc 100644 --- a/stories/account/pages/Totp.stories.tsx +++ b/stories/account/pages/Totp.stories.tsx @@ -1,6 +1,6 @@ import React from "react"; import type { Meta, StoryObj } from "@storybook/react"; -import { createPageStory, parameters } from "../createPageStory"; +import { createPageStory, parameters } from "../PageStory"; const pageId = "totp.ftl"; diff --git a/stories/login/kcContext.ts b/stories/login/KcContext.ts similarity index 100% rename from stories/login/kcContext.ts rename to stories/login/KcContext.ts diff --git a/stories/login/createPageStory.tsx b/stories/login/PageStory.tsx similarity index 67% rename from stories/login/createPageStory.tsx rename to stories/login/PageStory.tsx index faf98f8a..0f7af306 100644 --- a/stories/login/createPageStory.tsx +++ b/stories/login/PageStory.tsx @@ -1,8 +1,17 @@ import React from "react"; import type { KcContext } from "./kcContext"; -import { getKcContextMock } from "./kcContextMock"; import KcApp from "./KcApp"; import type { DeepPartial } from "../../dist/tools/DeepPartial"; +import { createGetKcContextMock } from "../../dist/login"; +import type { KcContextExtraProperties, KcContextExtraPropertiesPerPage } from "./kcContext"; + +const kcContextExtraProperties: KcContextExtraProperties = {}; +const kcContextExtraPropertiesPerPage: KcContextExtraPropertiesPerPage = {}; + +const { getKcContextMock } = createGetKcContextMock({ + kcContextExtraProperties, + kcContextExtraPropertiesPerPage +}); export function createPageStory(params: { pageId: PageId }) { const { pageId } = params; diff --git a/stories/login/kcContextMock.ts b/stories/login/kcContextMock.ts deleted file mode 100644 index d248db14..00000000 --- a/stories/login/kcContextMock.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { createGetKcContextMock } from "../../dist/login"; -import type { - KcContextExtraProperties, - KcContextExtraPropertiesPerPage -} from "./kcContext"; - -const kcContextExtraProperties: KcContextExtraProperties = {}; -const kcContextExtraPropertiesPerPage: KcContextExtraPropertiesPerPage = {}; - -export const { getKcContextMock } = createGetKcContextMock({ - kcContextExtraProperties, - kcContextExtraPropertiesPerPage -}); diff --git a/stories/login/pages/Code.stories.tsx b/stories/login/pages/Code.stories.tsx index b8daddd3..3e7361f1 100644 --- a/stories/login/pages/Code.stories.tsx +++ b/stories/login/pages/Code.stories.tsx @@ -1,6 +1,6 @@ import React from "react"; import type { Meta, StoryObj } from "@storybook/react"; -import { createPageStory, parameters } from "../createPageStory"; +import { createPageStory, parameters } from "../PageStory"; const pageId = "code.ftl"; diff --git a/test/login/kcContext.typelevel-spec.ts b/test/login/KcContext.typelevel-spec.ts similarity index 100% rename from test/login/kcContext.typelevel-spec.ts rename to test/login/KcContext.typelevel-spec.ts diff --git a/test/login/kcContextMock.spec.ts b/test/login/getKcContextMock.spec.ts similarity index 100% rename from test/login/kcContextMock.spec.ts rename to test/login/getKcContextMock.spec.ts index 3e259ffd..744ba3d4 100644 --- a/test/login/kcContextMock.spec.ts +++ b/test/login/getKcContextMock.spec.ts @@ -1,5 +1,5 @@ -import { createGetKcContextMock, type Attribute } from "keycloakify/login"; import { id } from "tsafe/id"; +import { createGetKcContextMock, type Attribute } from "keycloakify/login"; import { kcContextMocks, kcContextCommonMock