import type { CommerceEngineDefinition, Controller, ControllerDefinitionsMap, InferControllerFromDefinition, InferControllerStaticStateMapFromDefinitionsWithSolutionType, InferControllersMapFromDefinition, SolutionType, CommerceEngine as SSRCommerceEngine } from '@coveo/headless/ssr-commerce-next'; import type { FunctionComponent, PropsWithChildren } from 'react'; export type ContextHydratedState, TSolutionType extends SolutionType> = { engine: SSRCommerceEngine; controllers: InferControllersMapFromDefinition; solutionType: TSolutionType; }; export type ContextState, TSolutionType extends SolutionType> = { engine?: SSRCommerceEngine; controllers: InferControllersMapFromDefinition | InferControllerStaticStateMapFromDefinitionsWithSolutionType; solutionType: TSolutionType; }; export type ControllerHook = () => { state: TController['state']; methods?: Omit; }; export type InferControllerHooksMapFromDefinition> = { [K in keyof TControllers as `use${Capitalize}`]: ControllerHook>; }; export type ReactEngineDefinition, TSolutionType extends SolutionType> = CommerceEngineDefinition & { StateProvider: FunctionComponent | InferControllerStaticStateMapFromDefinitionsWithSolutionType; }>>; };