From 23409c3579f40ad1c4dc374712205ef866101314 Mon Sep 17 00:00:00 2001 From: Adrian Nadau Semb <31008843+ansemb@users.noreply.github.com> Date: Mon, 11 Aug 2025 15:27:34 +0000 Subject: [PATCH 1/5] fix(nova-react-test-utils): explicit export type of EventingInterceptorFn --- .../src/shared/eventing-interceptor.tsx | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/packages/nova-react-test-utils/src/shared/eventing-interceptor.tsx b/packages/nova-react-test-utils/src/shared/eventing-interceptor.tsx index cd0fca3..2cd036b 100644 --- a/packages/nova-react-test-utils/src/shared/eventing-interceptor.tsx +++ b/packages/nova-react-test-utils/src/shared/eventing-interceptor.tsx @@ -15,13 +15,19 @@ type EventMap = { }) => Promise; }; +export type EventingInterceptorProps = { + eventMap: EventMap; + children: React.ReactNode; +}; + +export type EventingInterceptorFn = ( + props: EventingInterceptorProps, +) => React.ReactElement; + export const EventingInterceptor = ({ eventMap, children, -}: { - eventMap: EventMap; - children: React.ReactNode; -}) => { +}: EventingInterceptorProps) => { const interceptor: EventInterceptor = (eventWrapper) => { const eventType = eventWrapper.event.type; const customEventHandler = eventMap[eventType]; From 7f3f7ca422b5dc9ee0af005572abb96a336fa5c7 Mon Sep 17 00:00:00 2001 From: Adrian Nadau Semb <31008843+ansemb@users.noreply.github.com> Date: Mon, 11 Aug 2025 15:58:36 +0000 Subject: [PATCH 2/5] Change files --- ...ct-test-utils-c4495bc3-af48-4565-94ac-61dc7ffc424d.json | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 change/@nova-react-test-utils-c4495bc3-af48-4565-94ac-61dc7ffc424d.json diff --git a/change/@nova-react-test-utils-c4495bc3-af48-4565-94ac-61dc7ffc424d.json b/change/@nova-react-test-utils-c4495bc3-af48-4565-94ac-61dc7ffc424d.json new file mode 100644 index 0000000..85d90a1 --- /dev/null +++ b/change/@nova-react-test-utils-c4495bc3-af48-4565-94ac-61dc7ffc424d.json @@ -0,0 +1,7 @@ +{ + "type": "patch", + "comment": "fix(nova-react-test-utils): explicit export type of EventingInterceptorFn", + "packageName": "@nova/react-test-utils", + "email": "31008843+ansemb@users.noreply.github.com", + "dependentChangeType": "patch" +} From 07c4e968dad851e1dec6a41cad610131c005455b Mon Sep 17 00:00:00 2001 From: Adrian Nadau Semb <31008843+ansemb@users.noreply.github.com> Date: Tue, 12 Aug 2025 08:11:17 +0000 Subject: [PATCH 3/5] use PropsWithChildren and FC from react --- .../src/shared/eventing-interceptor.tsx | 20 ++++++------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/packages/nova-react-test-utils/src/shared/eventing-interceptor.tsx b/packages/nova-react-test-utils/src/shared/eventing-interceptor.tsx index 2cd036b..06c7b09 100644 --- a/packages/nova-react-test-utils/src/shared/eventing-interceptor.tsx +++ b/packages/nova-react-test-utils/src/shared/eventing-interceptor.tsx @@ -15,29 +15,21 @@ type EventMap = { }) => Promise; }; -export type EventingInterceptorProps = { +export type EventingInterceptorProps = React.PropsWithChildren<{ eventMap: EventMap; - children: React.ReactNode; -}; - -export type EventingInterceptorFn = ( - props: EventingInterceptorProps, -) => React.ReactElement; +}>; +export type EventingInterceptorFC = React.FC>; -export const EventingInterceptor = ({ +export const EventingInterceptor: EventingInterceptorFC = ({ eventMap, children, -}: EventingInterceptorProps) => { +}) => { const interceptor: EventInterceptor = (eventWrapper) => { const eventType = eventWrapper.event.type; const customEventHandler = eventMap[eventType]; if (customEventHandler) { return customEventHandler( - // As the key was in the map we now the type is correct - eventWrapper as unknown as { - event: ReturnType; - source: Source; - }, + eventWrapper, ); } else { return Promise.resolve(eventWrapper); From 6e3ebf0576147ffe97e6082672402dee887bec41 Mon Sep 17 00:00:00 2001 From: Adrian Nadau Semb <31008843+ansemb@users.noreply.github.com> Date: Tue, 12 Aug 2025 08:29:56 +0000 Subject: [PATCH 4/5] revert to generic, and export types from apollo and relay --- packages/nova-react-test-utils/src/apollo/index.ts | 6 +++++- packages/nova-react-test-utils/src/relay/index.ts | 6 +++++- .../src/shared/eventing-interceptor.tsx | 10 +++++++--- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/packages/nova-react-test-utils/src/apollo/index.ts b/packages/nova-react-test-utils/src/apollo/index.ts index 10256eb..93a2c73 100644 --- a/packages/nova-react-test-utils/src/apollo/index.ts +++ b/packages/nova-react-test-utils/src/apollo/index.ts @@ -7,7 +7,11 @@ export type { MockResolvers, DefaultMockResolvers, } from "../shared/storybook-nova-decorator-shared"; -export { EventingInterceptor } from "../shared/eventing-interceptor"; +export { + EventingInterceptor, + type EventingInterceptorFC, + type EventingInterceptorProps +} from "../shared/eventing-interceptor"; export type { StoryObjWithoutFragmentRefs } from "../shared/types"; export { diff --git a/packages/nova-react-test-utils/src/relay/index.ts b/packages/nova-react-test-utils/src/relay/index.ts index ddeaedb..2049ab1 100644 --- a/packages/nova-react-test-utils/src/relay/index.ts +++ b/packages/nova-react-test-utils/src/relay/index.ts @@ -7,7 +7,11 @@ export type { MockResolvers, DefaultMockResolvers, } from "../shared/storybook-nova-decorator-shared"; -export { EventingInterceptor } from "../shared/eventing-interceptor"; +export { + EventingInterceptor, + type EventingInterceptorFC, + type EventingInterceptorProps +} from "../shared/eventing-interceptor"; export type { StoryObjWithoutFragmentRefs } from "../shared/types"; export { diff --git a/packages/nova-react-test-utils/src/shared/eventing-interceptor.tsx b/packages/nova-react-test-utils/src/shared/eventing-interceptor.tsx index 06c7b09..9a72d8f 100644 --- a/packages/nova-react-test-utils/src/shared/eventing-interceptor.tsx +++ b/packages/nova-react-test-utils/src/shared/eventing-interceptor.tsx @@ -20,16 +20,20 @@ export type EventingInterceptorProps = React.PropsWit }>; export type EventingInterceptorFC = React.FC>; -export const EventingInterceptor: EventingInterceptorFC = ({ +export const EventingInterceptor = ({ eventMap, children, -}) => { +}: EventingInterceptorProps) => { const interceptor: EventInterceptor = (eventWrapper) => { const eventType = eventWrapper.event.type; const customEventHandler = eventMap[eventType]; if (customEventHandler) { return customEventHandler( - eventWrapper, + // As the key was in the map we now the type is correct + eventWrapper as unknown as { + event: ReturnType; + source: Source; + }, ); } else { return Promise.resolve(eventWrapper); From 5b1e73d42d327fe418cbece1baaadb0e301de234 Mon Sep 17 00:00:00 2001 From: Adrian Nadau Semb <31008843+ansemb@users.noreply.github.com> Date: Tue, 12 Aug 2025 09:12:58 +0000 Subject: [PATCH 5/5] add satisfies EventingInterceptorFC --- .../nova-react-test-utils/src/shared/eventing-interceptor.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/nova-react-test-utils/src/shared/eventing-interceptor.tsx b/packages/nova-react-test-utils/src/shared/eventing-interceptor.tsx index 9a72d8f..e614a13 100644 --- a/packages/nova-react-test-utils/src/shared/eventing-interceptor.tsx +++ b/packages/nova-react-test-utils/src/shared/eventing-interceptor.tsx @@ -20,7 +20,7 @@ export type EventingInterceptorProps = React.PropsWit }>; export type EventingInterceptorFC = React.FC>; -export const EventingInterceptor = ({ +export const EventingInterceptor = (({ eventMap, children, }: EventingInterceptorProps) => { @@ -45,4 +45,4 @@ export const EventingInterceptor = ({ {children} ); -}; +}) satisfies EventingInterceptorFC;