@coveo/headless 3.29.2-pre.5e80d623af → 3.29.2-pre.5fc0927ed4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/dist/cjs/case-assist/headless.cjs +1 -1
  2. package/dist/cjs/commerce/headless.cjs +1 -1
  3. package/dist/cjs/headless.cjs +1 -1
  4. package/dist/cjs/insight/headless.cjs +1 -1
  5. package/dist/cjs/recommendation/headless.cjs +1 -1
  6. package/dist/cjs/ssr/headless.cjs +1 -1
  7. package/dist/cjs/ssr-commerce/headless.cjs +1 -1
  8. package/dist/cjs/ssr-commerce-next/headless.cjs +1 -1
  9. package/dist/cjs/ssr-next/headless.cjs +1 -1
  10. package/dist/definitions/ssr/commerce/types/controller-definitions.d.ts +0 -3
  11. package/dist/definitions/ssr-commerce-next.index.d.ts +8 -8
  12. package/dist/definitions/ssr-next/commerce/controller-utils.d.ts +2 -1
  13. package/dist/definitions/ssr-next/commerce/controllers/breadcrumb-manager/headless-core-breadcrumb-manager.ssr.d.ts +2 -3
  14. package/dist/definitions/ssr-next/commerce/controllers/cart/headless-cart.ssr.d.ts +2 -1
  15. package/dist/definitions/ssr-next/commerce/controllers/context/headless-context.ssr.d.ts +3 -2
  16. package/dist/definitions/ssr-next/commerce/controllers/did-you-mean/headless-did-you-mean.ssr.d.ts +1 -2
  17. package/dist/definitions/ssr-next/commerce/controllers/filter-suggestions/headless-filter-suggestions-generator.ssr.d.ts +2 -1
  18. package/dist/definitions/ssr-next/commerce/controllers/generator/headless-commerce-facet-generator.ssr.d.ts +2 -3
  19. package/dist/definitions/ssr-next/commerce/controllers/instant-products/headless-instant-products.ssr.d.ts +2 -1
  20. package/dist/definitions/ssr-next/commerce/controllers/pagination/headless-core-commerce-pagination.ssr.d.ts +2 -3
  21. package/dist/definitions/ssr-next/commerce/controllers/parameter-manager/headless-core-parameter-manager.ssr.d.ts +13 -3
  22. package/dist/definitions/ssr-next/commerce/controllers/product-list/headless-product-list.ssr.d.ts +2 -3
  23. package/dist/definitions/ssr-next/commerce/controllers/product-view/headless-product-view.ssr.d.ts +3 -1
  24. package/dist/definitions/ssr-next/commerce/controllers/recent-queries-list/headless-recent-queries-list.ssr.d.ts +2 -1
  25. package/dist/definitions/ssr-next/commerce/controllers/search-box/headless-search-box.ssr.d.ts +2 -1
  26. package/dist/definitions/ssr-next/commerce/controllers/sort/headless-core-commerce-sort.ssr.d.ts +2 -3
  27. package/dist/definitions/ssr-next/commerce/controllers/standalone-search-box/headless-standalone-search-box.ssr.d.ts +2 -1
  28. package/dist/definitions/ssr-next/commerce/controllers/summary/headless-core-summary.ssr.d.ts +2 -3
  29. package/dist/definitions/ssr-next/commerce/controllers/triggers/headless-notify-trigger.ssr.d.ts +2 -1
  30. package/dist/definitions/ssr-next/commerce/controllers/triggers/headless-query-trigger.ssr.d.ts +2 -1
  31. package/dist/definitions/ssr-next/commerce/controllers/triggers/headless-redirection-trigger.ssr.d.ts +2 -1
  32. package/dist/definitions/ssr-next/commerce/types/controller-definitions.d.ts +48 -3
  33. package/dist/definitions/ssr-next/search/types/engine.d.ts +1 -1
  34. package/dist/esm/ssr-next/commerce/controller-utils.js +6 -0
  35. package/dist/esm/ssr-next/commerce/controllers/breadcrumb-manager/headless-core-breadcrumb-manager.ssr.js +4 -1
  36. package/dist/esm/ssr-next/commerce/controllers/generator/headless-commerce-facet-generator.ssr.js +4 -1
  37. package/dist/esm/ssr-next/commerce/controllers/pagination/headless-core-commerce-pagination.ssr.js +2 -0
  38. package/dist/esm/ssr-next/commerce/controllers/parameter-manager/headless-core-parameter-manager.ssr.js +4 -1
  39. package/dist/esm/ssr-next/commerce/controllers/product-list/headless-product-list.ssr.js +4 -1
  40. package/dist/esm/ssr-next/commerce/controllers/sort/headless-core-commerce-sort.ssr.js +2 -0
  41. package/dist/esm/ssr-next/commerce/controllers/summary/headless-core-summary.ssr.js +4 -1
  42. package/dist/esm/utils/version.js +1 -1
  43. package/dist/quantic/case-assist/headless.js +1 -1
  44. package/dist/quantic/commerce/headless.js +1 -1
  45. package/dist/quantic/headless.js +1 -1
  46. package/dist/quantic/insight/headless.js +1 -1
  47. package/dist/quantic/recommendation/headless.js +1 -1
  48. package/package.json +1 -1
@@ -800,7 +800,7 @@ var import_bueno5 = require("@coveo/bueno");
800
800
  var import_toolkit7 = require("@reduxjs/toolkit");
801
801
 
802
802
  // src/utils/version.ts
803
- var VERSION = "3.29.2-pre.5e80d623af";
803
+ var VERSION = "3.29.2-pre.5fc0927ed4";
804
804
  var COVEO_FRAMEWORK = ["@coveo/atomic", "@coveo/quantic"];
805
805
 
806
806
  // src/features/configuration/configuration-actions.ts
@@ -1149,7 +1149,7 @@ var import_bueno6 = require("@coveo/bueno");
1149
1149
  var import_toolkit4 = require("@reduxjs/toolkit");
1150
1150
 
1151
1151
  // src/utils/version.ts
1152
- var VERSION = "3.29.2-pre.5e80d623af";
1152
+ var VERSION = "3.29.2-pre.5fc0927ed4";
1153
1153
  var COVEO_FRAMEWORK = ["@coveo/atomic", "@coveo/quantic"];
1154
1154
 
1155
1155
  // src/features/configuration/configuration-actions.ts
@@ -1374,7 +1374,7 @@ var import_toolkit2 = require("@reduxjs/toolkit");
1374
1374
  var import_toolkit = require("@reduxjs/toolkit");
1375
1375
 
1376
1376
  // src/utils/version.ts
1377
- var VERSION = "3.29.2-pre.5e80d623af";
1377
+ var VERSION = "3.29.2-pre.5fc0927ed4";
1378
1378
  var COVEO_FRAMEWORK = ["@coveo/atomic", "@coveo/quantic"];
1379
1379
 
1380
1380
  // src/api/analytics/analytics-selectors.ts
@@ -1278,7 +1278,7 @@ var import_toolkit2 = require("@reduxjs/toolkit");
1278
1278
  var import_toolkit = require("@reduxjs/toolkit");
1279
1279
 
1280
1280
  // src/utils/version.ts
1281
- var VERSION = "3.29.2-pre.5e80d623af";
1281
+ var VERSION = "3.29.2-pre.5fc0927ed4";
1282
1282
  var COVEO_FRAMEWORK = ["@coveo/atomic", "@coveo/quantic"];
1283
1283
 
1284
1284
  // src/api/analytics/analytics-selectors.ts
@@ -881,7 +881,7 @@ var validateObject = (engine, schema, obj, validationMessage, errorMessage) => {
881
881
  };
882
882
 
883
883
  // src/utils/version.ts
884
- var VERSION = "3.29.2-pre.5e80d623af";
884
+ var VERSION = "3.29.2-pre.5fc0927ed4";
885
885
  var COVEO_FRAMEWORK = ["@coveo/atomic", "@coveo/quantic"];
886
886
 
887
887
  // src/features/configuration/configuration-actions.ts
@@ -1306,7 +1306,7 @@ var import_toolkit2 = require("@reduxjs/toolkit");
1306
1306
  var import_toolkit = require("@reduxjs/toolkit");
1307
1307
 
1308
1308
  // src/utils/version.ts
1309
- var VERSION = "3.29.2-pre.5e80d623af";
1309
+ var VERSION = "3.29.2-pre.5fc0927ed4";
1310
1310
  var COVEO_FRAMEWORK = ["@coveo/atomic", "@coveo/quantic"];
1311
1311
 
1312
1312
  // src/api/analytics/analytics-selectors.ts
@@ -468,7 +468,7 @@ var import_bueno8 = require("@coveo/bueno");
468
468
  var import_toolkit3 = require("@reduxjs/toolkit");
469
469
 
470
470
  // src/utils/version.ts
471
- var VERSION = "3.29.2-pre.5e80d623af";
471
+ var VERSION = "3.29.2-pre.5fc0927ed4";
472
472
  var COVEO_FRAMEWORK = ["@coveo/atomic", "@coveo/quantic"];
473
473
 
474
474
  // src/features/configuration/configuration-actions.ts
@@ -468,7 +468,7 @@ var import_bueno8 = require("@coveo/bueno");
468
468
  var import_toolkit3 = require("@reduxjs/toolkit");
469
469
 
470
470
  // src/utils/version.ts
471
- var VERSION = "3.29.2-pre.5e80d623af";
471
+ var VERSION = "3.29.2-pre.5fc0927ed4";
472
472
  var COVEO_FRAMEWORK = ["@coveo/atomic", "@coveo/quantic"];
473
473
 
474
474
  // src/features/configuration/configuration-actions.ts
@@ -1306,7 +1306,7 @@ var import_toolkit2 = require("@reduxjs/toolkit");
1306
1306
  var import_toolkit = require("@reduxjs/toolkit");
1307
1307
 
1308
1308
  // src/utils/version.ts
1309
- var VERSION = "3.29.2-pre.5e80d623af";
1309
+ var VERSION = "3.29.2-pre.5fc0927ed4";
1310
1310
  var COVEO_FRAMEWORK = ["@coveo/atomic", "@coveo/quantic"];
1311
1311
 
1312
1312
  // src/api/analytics/analytics-selectors.ts
@@ -170,9 +170,6 @@ type DefaultControllerProps<TControllers extends ControllerDefinitionsMap<Contro
170
170
  [I in keyof TControllersPropsMap as I extends K ? I : never]: TControllersPropsMap[I];
171
171
  };
172
172
  type ConditionalControllerProps<TControllers extends ControllerDefinitionsMap<Controller>, TControllersPropsMap extends ControllersPropsMap, TSolutionType extends SolutionType, K extends keyof TControllers> = TSolutionType extends SolutionType.recommendation ? RecommendationControllerProps<TControllers, TControllersPropsMap, K> : DefaultControllerProps<TControllers, TControllersPropsMap, K>;
173
- /**
174
- * @deprecated This interface is no longer used and will be removed in next major version.
175
- */
176
173
  export interface ControllerDefinitionOption {
177
174
  /**
178
175
  * Whether the controller will be used in a product listing context.
@@ -76,27 +76,27 @@ export type { LoggerOptions, LogLevel } from './app/logger.js';
76
76
  export type { BrowserNavigatorContextProvider, NavigatorContext, NavigatorContextProvider, } from './app/navigator-context-provider.js';
77
77
  export type { InteractiveProduct, InteractiveProductOptions, InteractiveProductProps, } from './controllers/commerce/core/interactive-product/headless-core-interactive-product.js';
78
78
  export type { Controller, Subscribable, } from './controllers/controller/headless-controller.js';
79
- export type { BreadcrumbManager, BreadcrumbManagerDefinition, BreadcrumbManagerState, } from './ssr-next/commerce/controllers/breadcrumb-manager/headless-core-breadcrumb-manager.ssr.js';
79
+ export type { BreadcrumbManager, BreadcrumbManagerState, } from './ssr-next/commerce/controllers/breadcrumb-manager/headless-core-breadcrumb-manager.ssr.js';
80
80
  export { defineBreadcrumbManager } from './ssr-next/commerce/controllers/breadcrumb-manager/headless-core-breadcrumb-manager.ssr.js';
81
81
  export type { Cart, CartBuildProps, CartDefinition, CartInitialState, CartItem, CartProps, CartState, } from './ssr-next/commerce/controllers/cart/headless-cart.ssr.js';
82
82
  export { defineCart } from './ssr-next/commerce/controllers/cart/headless-cart.ssr.js';
83
83
  export type { Context, ContextDefinition, ContextOptions, ContextProps, ContextState, UserLocation, View, } from './ssr-next/commerce/controllers/context/headless-context.ssr.js';
84
84
  export { defineContext } from './ssr-next/commerce/controllers/context/headless-context.ssr.js';
85
- export type { DidYouMean, DidYouMeanDefinition, DidYouMeanState, } from './ssr-next/commerce/controllers/did-you-mean/headless-did-you-mean.ssr.js';
85
+ export type { DidYouMean, DidYouMeanState, } from './ssr-next/commerce/controllers/did-you-mean/headless-did-you-mean.ssr.js';
86
86
  export { defineDidYouMean } from './ssr-next/commerce/controllers/did-you-mean/headless-did-you-mean.ssr.js';
87
87
  export type { CategoryFilterSuggestions, CategoryFilterSuggestionsState, FieldSuggestionsFacet, FilterSuggestions, FilterSuggestionsGenerator, FilterSuggestionsGeneratorDefinition, FilterSuggestionsState, GeneratedFilterSuggestionsControllers, } from './ssr-next/commerce/controllers/filter-suggestions/headless-filter-suggestions-generator.ssr.js';
88
88
  export { defineFilterSuggestionsGenerator } from './ssr-next/commerce/controllers/filter-suggestions/headless-filter-suggestions-generator.ssr.js';
89
- export type { BaseFacetSearchResult, CategoryFacet, CategoryFacetSearchResult, CategoryFacetState, CategoryFacetValue, CoreCommerceFacet, DateFacet, DateFacetState, DateFacetValue, FacetGenerator, FacetGeneratorDefinition, FacetGeneratorState, FacetType, LocationFacet, LocationFacetState, LocationFacetValue, MappedFacetState, MappedFacetStates, MappedGeneratedFacetController, NumericFacet, NumericFacetState, NumericFacetValue, RegularFacet, RegularFacetState, RegularFacetValue, } from './ssr-next/commerce/controllers/generator/headless-commerce-facet-generator.ssr.js';
89
+ export type { BaseFacetSearchResult, CategoryFacet, CategoryFacetSearchResult, CategoryFacetState, CategoryFacetValue, CoreCommerceFacet, DateFacet, DateFacetState, DateFacetValue, FacetGenerator, FacetGeneratorState, FacetType, LocationFacet, LocationFacetState, LocationFacetValue, MappedFacetState, MappedFacetStates, MappedGeneratedFacetController, NumericFacet, NumericFacetState, NumericFacetValue, RegularFacet, RegularFacetState, RegularFacetValue, } from './ssr-next/commerce/controllers/generator/headless-commerce-facet-generator.ssr.js';
90
90
  export { defineFacetGenerator } from './ssr-next/commerce/controllers/generator/headless-commerce-facet-generator.ssr.js';
91
91
  export type { InstantProducts, InstantProductsDefinition, InstantProductsOptions, InstantProductsProps, InstantProductsState, } from './ssr-next/commerce/controllers/instant-products/headless-instant-products.ssr.js';
92
92
  export { defineInstantProducts } from './ssr-next/commerce/controllers/instant-products/headless-instant-products.ssr.js';
93
- export type { CorePaginationOptions, Pagination, PaginationDefinition, PaginationOptions, PaginationProps, PaginationState, } from './ssr-next/commerce/controllers/pagination/headless-core-commerce-pagination.ssr.js';
93
+ export type { CorePaginationOptions, Pagination, PaginationOptions, PaginationProps, PaginationState, } from './ssr-next/commerce/controllers/pagination/headless-core-commerce-pagination.ssr.js';
94
94
  export { definePagination } from './ssr-next/commerce/controllers/pagination/headless-core-commerce-pagination.ssr.js';
95
95
  export type { CommerceSearchParameters, ParameterManager, ParameterManagerDefinition, ParameterManagerProps, ParameterManagerState, Parameters, ProductListingParameters, SSRParameterManagerProps, } from './ssr-next/commerce/controllers/parameter-manager/headless-core-parameter-manager.ssr.js';
96
96
  export { defineParameterManager } from './ssr-next/commerce/controllers/parameter-manager/headless-core-parameter-manager.ssr.js';
97
- export type { ProductList, ProductListDefinition, ProductListing, ProductListState, Search, } from './ssr-next/commerce/controllers/product-list/headless-product-list.ssr.js';
97
+ export type { ProductList, ProductListing, ProductListState, Search, } from './ssr-next/commerce/controllers/product-list/headless-product-list.ssr.js';
98
98
  export { defineProductList } from './ssr-next/commerce/controllers/product-list/headless-product-list.ssr.js';
99
- export type { ProductView, ProductViewDefinition, } from './ssr-next/commerce/controllers/product-view/headless-product-view.ssr.js';
99
+ export type { ProductView } from './ssr-next/commerce/controllers/product-view/headless-product-view.ssr.js';
100
100
  export { defineProductView } from './ssr-next/commerce/controllers/product-view/headless-product-view.ssr.js';
101
101
  export type { RecentQueriesList, RecentQueriesListDefinition, RecentQueriesListInitialState, RecentQueriesListOptions, RecentQueriesListProps, RecentQueriesState, } from './ssr-next/commerce/controllers/recent-queries-list/headless-recent-queries-list.ssr.js';
102
102
  export { defineRecentQueriesList } from './ssr-next/commerce/controllers/recent-queries-list/headless-recent-queries-list.ssr.js';
@@ -104,11 +104,11 @@ export type { Recommendations, RecommendationsDefinition, RecommendationsState,
104
104
  export { defineRecommendations } from './ssr-next/commerce/controllers/recommendations/headless-recommendations.ssr.js';
105
105
  export type { CoreSearchBox, SearchBox, SearchBoxDefinition, SearchBoxOptions, SearchBoxProps, SearchBoxState, Suggestion, } from './ssr-next/commerce/controllers/search-box/headless-search-box.ssr.js';
106
106
  export { defineSearchBox } from './ssr-next/commerce/controllers/search-box/headless-search-box.ssr.js';
107
- export type { Sort, SortDefinition, SortProps, SortState, } from './ssr-next/commerce/controllers/sort/headless-core-commerce-sort.ssr.js';
107
+ export type { Sort, SortProps, SortState, } from './ssr-next/commerce/controllers/sort/headless-core-commerce-sort.ssr.js';
108
108
  export { defineSort } from './ssr-next/commerce/controllers/sort/headless-core-commerce-sort.ssr.js';
109
109
  export type { StandaloneSearchBox, StandaloneSearchBoxDefinition, StandaloneSearchBoxProps, StandaloneSearchBoxState, } from './ssr-next/commerce/controllers/standalone-search-box/headless-standalone-search-box.ssr.js';
110
110
  export { defineStandaloneSearchBox } from './ssr-next/commerce/controllers/standalone-search-box/headless-standalone-search-box.ssr.js';
111
- export type { ProductListingSummaryState, RecommendationsSummaryState, SearchSummaryState, Summary, SummaryDefinition, SummaryState, } from './ssr-next/commerce/controllers/summary/headless-core-summary.ssr.js';
111
+ export type { ProductListingSummaryState, RecommendationsSummaryState, SearchSummaryState, Summary, SummaryState, } from './ssr-next/commerce/controllers/summary/headless-core-summary.ssr.js';
112
112
  export { defineSummary } from './ssr-next/commerce/controllers/summary/headless-core-summary.ssr.js';
113
113
  export type { NotifyTrigger, NotifyTriggerDefinition, NotifyTriggerState, } from './ssr-next/commerce/controllers/triggers/headless-notify-trigger.ssr.js';
114
114
  export { defineNotifyTrigger } from './ssr-next/commerce/controllers/triggers/headless-notify-trigger.ssr.js';
@@ -2,7 +2,7 @@ import type { UnknownAction } from '@reduxjs/toolkit';
2
2
  import type { Controller } from '../../controllers/controller/headless-controller.js';
3
3
  import type { SSRCommerceEngine } from './factories/build-factory.js';
4
4
  import type { SolutionType } from './types/controller-constants.js';
5
- import type { ControllerDefinitionsMap } from './types/controller-definitions.js';
5
+ import type { ControllerDefinitionOption, ControllerDefinitionsMap } from './types/controller-definitions.js';
6
6
  import type { InferControllerPropsMapFromDefinitions, InferControllerStaticStateMapFromDefinitionsWithSolutionType, InferControllersMapFromDefinition } from './types/controller-inference.js';
7
7
  import type { EngineStaticState } from './types/engine.js';
8
8
  export declare function createStaticState<TSearchAction extends UnknownAction, TControllerDefinitions extends ControllerDefinitionsMap<Controller>>({ searchActions, controllers, }: {
@@ -15,3 +15,4 @@ export declare function buildControllerDefinitions<TControllerDefinitionsMap ext
15
15
  solutionType: TSolutionType;
16
16
  propsMap?: InferControllerPropsMapFromDefinitions<TControllerDefinitionsMap>;
17
17
  }): InferControllersMapFromDefinition<TControllerDefinitionsMap, TSolutionType>;
18
+ export declare function ensureAtLeastOneSolutionType(options?: ControllerDefinitionOption): void;
@@ -1,11 +1,10 @@
1
1
  import type { BreadcrumbManager, BreadcrumbManagerState } from '../../../../controllers/commerce/core/breadcrumb-manager/headless-core-breadcrumb-manager.js';
2
- import type { SearchAndListingControllerDefinitionWithoutProps } from '../../types/controller-definitions.js';
2
+ import type { ControllerDefinitionOption, SubControllerDefinitionWithoutProps } from '../../types/controller-definitions.js';
3
3
  export type { BreadcrumbManager, BreadcrumbManagerState };
4
- export type BreadcrumbManagerDefinition = SearchAndListingControllerDefinitionWithoutProps<BreadcrumbManager>;
5
4
  /**
6
5
  * Defines a `BreadcrumbManager` controller instance.
7
6
  * @group Definers
8
7
  *
9
8
  * @returns The `BreadcrumbManager` controller definition.
10
9
  */
11
- export declare function defineBreadcrumbManager(): BreadcrumbManagerDefinition;
10
+ export declare function defineBreadcrumbManager<TOptions extends ControllerDefinitionOption | undefined>(options?: TOptions): SubControllerDefinitionWithoutProps<BreadcrumbManager, TOptions>;
@@ -4,7 +4,8 @@ export type { Cart, CartInitialState, CartItem, CartProps, CartState };
4
4
  export interface CartBuildProps {
5
5
  initialState: CartInitialState;
6
6
  }
7
- export type CartDefinition = UniversalControllerDefinitionWithProps<Cart, CartBuildProps>;
7
+ export interface CartDefinition extends UniversalControllerDefinitionWithProps<Cart, CartBuildProps> {
8
+ }
8
9
  /**
9
10
  * Defines a `Cart` controller instance.
10
11
  * @group Definers
@@ -1,9 +1,10 @@
1
1
  import { type Context, type ContextOptions, type ContextProps, type ContextState, type UserLocation, type View } from '../../../../controllers/commerce/context/headless-context.js';
2
2
  import type { UniversalControllerDefinitionWithProps } from '../../types/controller-definitions.js';
3
3
  export type { Context, ContextProps, ContextState, View, UserLocation, ContextOptions, };
4
- export type ContextDefinition = UniversalControllerDefinitionWithProps<Context, {
4
+ export interface ContextDefinition extends UniversalControllerDefinitionWithProps<Context, {
5
5
  initialState: ContextOptions;
6
- }>;
6
+ }> {
7
+ }
7
8
  /**
8
9
  * Defines a `Context` controller instance.
9
10
  * @group Definers
@@ -1,11 +1,10 @@
1
1
  import type { DidYouMean, DidYouMeanState } from '../../../../controllers/commerce/search/did-you-mean/headless-did-you-mean.js';
2
2
  import type { SearchOnlyControllerDefinitionWithoutProps } from '../../types/controller-definitions.js';
3
3
  export type { DidYouMean, DidYouMeanState };
4
- export type DidYouMeanDefinition = SearchOnlyControllerDefinitionWithoutProps<DidYouMean>;
5
4
  /**
6
5
  * Defines a `DidYouMean` controller instance.
7
6
  * @group Definers
8
7
  *
9
8
  * @returns The `DidYouMean` controller definition.
10
9
  */
11
- export declare function defineDidYouMean(): DidYouMeanDefinition;
10
+ export declare function defineDidYouMean(): SearchOnlyControllerDefinitionWithoutProps<DidYouMean>;
@@ -4,7 +4,8 @@ import type { FilterSuggestions, FilterSuggestionsState } from '../../../../cont
4
4
  import { type FilterSuggestionsGenerator, type GeneratedFilterSuggestionsControllers } from '../../../../controllers/commerce/filter-suggestions/headless-filter-suggestions-generator.js';
5
5
  import type { NonRecommendationControllerDefinitionWithoutProps } from '../../types/controller-definitions.js';
6
6
  export type { FilterSuggestionsGenerator, GeneratedFilterSuggestionsControllers, FieldSuggestionsFacet, CategoryFilterSuggestions, CategoryFilterSuggestionsState, FilterSuggestions, FilterSuggestionsState, };
7
- export type FilterSuggestionsGeneratorDefinition = NonRecommendationControllerDefinitionWithoutProps<FilterSuggestionsGenerator>;
7
+ export interface FilterSuggestionsGeneratorDefinition extends NonRecommendationControllerDefinitionWithoutProps<FilterSuggestionsGenerator> {
8
+ }
8
9
  /**
9
10
  * Defines the `FilterSuggestionsGenerator` controller for the purpose of server-side rendering.
10
11
  * @group Definers
@@ -10,7 +10,7 @@ import type { NumericFacet, NumericFacetState, NumericFacetValue } from '../../.
10
10
  import type { RegularFacet, RegularFacetState } from '../../../../controllers/commerce/core/facets/regular/headless-commerce-regular-facet.js';
11
11
  import type { LocationFacetValue, RegularFacetValue } from '../../../../features/commerce/facets/facet-set/interfaces/response.js';
12
12
  import { SolutionType } from '../../types/controller-constants.js';
13
- import type { SearchAndListingControllerDefinitionWithoutProps } from '../../types/controller-definitions.js';
13
+ import type { ControllerDefinitionOption, SubControllerDefinitionWithoutProps } from '../../types/controller-definitions.js';
14
14
  export type { BaseFacetSearchResult, CategoryFacet, CategoryFacetState, CategoryFacetValue, CategoryFacetSearchResult, CoreCommerceFacet, DateFacet, DateFacetValue, DateFacetState, NumericFacet, NumericFacetValue, NumericFacetState, RegularFacet, RegularFacetState, RegularFacetValue, LocationFacet, LocationFacetState, LocationFacetValue, MappedGeneratedFacetController, };
15
15
  export type FacetGeneratorState = MappedFacetStates;
16
16
  export type MappedFacetStates = Array<MappedFacetState[FacetType]>;
@@ -18,11 +18,10 @@ export type { FacetType };
18
18
  export type MappedFacetState = {
19
19
  [T in FacetType]: T extends 'numericalRange' ? NumericFacetState : T extends 'regular' ? RegularFacetState : T extends 'dateRange' ? DateFacetState : T extends 'hierarchical' ? CategoryFacetState : T extends 'location' ? LocationFacetState : never;
20
20
  };
21
- export type FacetGeneratorDefinition = SearchAndListingControllerDefinitionWithoutProps<FacetGenerator>;
22
21
  /**
23
22
  * @group Definers
24
23
  */
25
- export declare function defineFacetGenerator(): FacetGeneratorDefinition;
24
+ export declare function defineFacetGenerator<TOptions extends ControllerDefinitionOption | undefined>(options?: TOptions): SubControllerDefinitionWithoutProps<FacetGenerator, TOptions>;
26
25
  /**
27
26
  * The `FacetGenerator` headless sub-controller creates commerce facet sub-controllers from the Commerce API search or
28
27
  * product listing response.
@@ -1,7 +1,8 @@
1
1
  import { type InstantProducts, type InstantProductsOptions, type InstantProductsProps, type InstantProductsState } from '../../../../controllers/commerce/instant-products/headless-instant-products.js';
2
2
  import type { NonRecommendationControllerDefinitionWithoutProps } from '../../types/controller-definitions.js';
3
3
  export type { InstantProductsOptions, InstantProductsState, InstantProducts, InstantProductsProps, };
4
- export type InstantProductsDefinition = NonRecommendationControllerDefinitionWithoutProps<InstantProducts>;
4
+ export interface InstantProductsDefinition extends NonRecommendationControllerDefinitionWithoutProps<InstantProducts> {
5
+ }
5
6
  /**
6
7
  * Defines the `InstantProducts` controller for the purpose of server-side rendering.
7
8
  * @group Definers
@@ -1,7 +1,6 @@
1
1
  import type { CorePaginationOptions, Pagination, PaginationOptions, PaginationProps, PaginationState } from '../../../../controllers/commerce/core/pagination/headless-core-commerce-pagination.js';
2
- import type { SearchAndListingControllerDefinitionWithoutProps } from '../../types/controller-definitions.js';
2
+ import type { ControllerDefinitionOption, SubControllerDefinitionWithoutProps } from '../../types/controller-definitions.js';
3
3
  export type { Pagination, PaginationProps, PaginationState, PaginationOptions, CorePaginationOptions, };
4
- export type PaginationDefinition = SearchAndListingControllerDefinitionWithoutProps<Pagination>;
5
4
  /**
6
5
  * Defines a `Pagination` controller instance.
7
6
  * @group Definers
@@ -9,4 +8,4 @@ export type PaginationDefinition = SearchAndListingControllerDefinitionWithoutPr
9
8
  * @param props - The configurable `Pagination` properties.
10
9
  * @returns The `Pagination` controller definition.
11
10
  */
12
- export declare function definePagination(props?: PaginationProps): PaginationDefinition;
11
+ export declare function definePagination<TOptions extends ControllerDefinitionOption | undefined>(props?: PaginationProps & TOptions): SubControllerDefinitionWithoutProps<Pagination, TOptions>;
@@ -2,15 +2,25 @@ import type { ParameterManager, ParameterManagerProps, ParameterManagerState } f
2
2
  import type { Parameters } from '../../../../features/commerce/parameters/parameters-actions.js';
3
3
  import type { ProductListingParameters } from '../../../../features/commerce/product-listing-parameters/product-listing-parameters-actions.js';
4
4
  import type { CommerceSearchParameters } from '../../../../features/commerce/search-parameters/search-parameters-actions.js';
5
- import type { SearchAndListingControllerDefinitionWithProps } from '../../types/controller-definitions.js';
5
+ import type { ControllerDefinitionOption, SubControllerDefinitionWithProps } from '../../types/controller-definitions.js';
6
6
  export type { ParameterManager, ParameterManagerProps, ParameterManagerState, Parameters, ProductListingParameters, CommerceSearchParameters, };
7
- export type ParameterManagerDefinition = SearchAndListingControllerDefinitionWithProps<ParameterManager<ProductListingParameters | CommerceSearchParameters>, SSRParameterManagerProps<ProductListingParameters | CommerceSearchParameters>>;
7
+ export type ParameterManagerDefinition<TOptions extends ControllerDefinitionOption | undefined> = SubControllerDefinitionWithProps<ParameterManager<MappedParameterTypes<TOptions>>, TOptions, SSRParameterManagerProps<MappedParameterTypes<TOptions>>>;
8
8
  /**
9
9
  * Defines a `ParameterManager` controller instance.
10
10
  * @group Definers
11
11
  *
12
12
  * @returns The `ParameterManager` controller definition.
13
13
  */
14
- export declare function defineParameterManager(): ParameterManagerDefinition;
14
+ export declare function defineParameterManager<TOptions extends ControllerDefinitionOption | undefined>(options?: TOptions): ParameterManagerDefinition<TOptions>;
15
15
  export interface SSRParameterManagerProps<T extends Parameters> extends Omit<ParameterManagerProps<T>, 'excludeDefaultParameters'> {
16
16
  }
17
+ type MappedParameterTypes<TOptions extends ControllerDefinitionOption | undefined> = TOptions extends {
18
+ listing: true;
19
+ search: true;
20
+ } | undefined ? ProductListingParameters | CommerceSearchParameters : TOptions extends {
21
+ listing: true;
22
+ search: false;
23
+ } ? ProductListingParameters : TOptions extends {
24
+ listing: false;
25
+ search: true;
26
+ } ? CommerceSearchParameters : never;
@@ -1,13 +1,12 @@
1
1
  import { type ProductListing, type ProductListingState } from '../../../../controllers/commerce/product-listing/headless-product-listing.js';
2
2
  import { type Search } from '../../../../controllers/commerce/search/headless-search.js';
3
- import type { SearchAndListingControllerDefinitionWithoutProps } from '../../types/controller-definitions.js';
3
+ import type { ControllerDefinitionOption, SubControllerDefinitionWithoutProps } from '../../types/controller-definitions.js';
4
4
  export type { Search, ProductListing, ProductListingState as ProductListState };
5
5
  export type ProductList = Pick<ProductListing | Search, 'state' | 'subscribe' | 'interactiveProduct' | 'promoteChildToParent'>;
6
- export type ProductListDefinition = SearchAndListingControllerDefinitionWithoutProps<ProductList>;
7
6
  /**
8
7
  * Defines a `ProductList` controller instance.
9
8
  * @group Definers
10
9
  *
11
10
  * @returns The `ProductList` controller definition.
12
11
  */
13
- export declare function defineProductList(): ProductListDefinition;
12
+ export declare function defineProductList<TOptions extends ControllerDefinitionOption | undefined>(options?: TOptions): SubControllerDefinitionWithoutProps<ProductList, TOptions>;
@@ -1,7 +1,8 @@
1
1
  import { type ProductView as BaseProductView } from '../../../../controllers/commerce/product-view/headless-product-view.js';
2
2
  import { type Controller } from '../../../../controllers/controller/headless-controller.js';
3
3
  import type { NonRecommendationControllerDefinitionWithoutProps } from '../../types/controller-definitions.js';
4
- export type ProductViewDefinition = NonRecommendationControllerDefinitionWithoutProps<ProductView>;
4
+ interface ProductViewDefinition extends NonRecommendationControllerDefinitionWithoutProps<ProductView> {
5
+ }
5
6
  /**
6
7
  * Defines a `ProductView` controller instance.
7
8
  *
@@ -16,3 +17,4 @@ export type ProductViewDefinition = NonRecommendationControllerDefinitionWithout
16
17
  export declare function defineProductView(): ProductViewDefinition;
17
18
  export interface ProductView extends BaseProductView, Controller {
18
19
  }
20
+ export {};
@@ -1,7 +1,8 @@
1
1
  import { type RecentQueriesList, type RecentQueriesListInitialState, type RecentQueriesListOptions, type RecentQueriesListProps, type RecentQueriesState } from '../../../../controllers/commerce/recent-queries-list/headless-recent-queries-list.js';
2
2
  import type { NonRecommendationControllerDefinitionWithoutProps } from '../../types/controller-definitions.js';
3
3
  export type { RecentQueriesListInitialState, RecentQueriesListOptions, RecentQueriesState, RecentQueriesList, RecentQueriesListProps, };
4
- export type RecentQueriesListDefinition = NonRecommendationControllerDefinitionWithoutProps<RecentQueriesList>;
4
+ export interface RecentQueriesListDefinition extends NonRecommendationControllerDefinitionWithoutProps<RecentQueriesList> {
5
+ }
5
6
  /**
6
7
  * Defines the `RecentQueriesList` controller for the purpose of server-side rendering.
7
8
  * @group Definers
@@ -1,7 +1,8 @@
1
1
  import { type CoreSearchBox, type SearchBox, type SearchBoxOptions, type SearchBoxProps, type SearchBoxState, type Suggestion } from '../../../../controllers/commerce/search-box/headless-search-box.js';
2
2
  import type { SearchOnlyControllerDefinitionWithoutProps } from '../../types/controller-definitions.js';
3
3
  export type { CoreSearchBox, SearchBox, SearchBoxProps, SearchBoxState, SearchBoxOptions, Suggestion, };
4
- export type SearchBoxDefinition = SearchOnlyControllerDefinitionWithoutProps<SearchBox>;
4
+ export interface SearchBoxDefinition extends SearchOnlyControllerDefinitionWithoutProps<SearchBox> {
5
+ }
5
6
  /**
6
7
  * Defines a `SearchBox` controller instance.
7
8
  * @group Definers
@@ -1,7 +1,6 @@
1
1
  import type { Sort, SortProps, SortState } from '../../../../controllers/commerce/core/sort/headless-core-commerce-sort.js';
2
- import type { SearchAndListingControllerDefinitionWithoutProps } from '../../types/controller-definitions.js';
2
+ import type { ControllerDefinitionOption, SubControllerDefinitionWithoutProps } from '../../types/controller-definitions.js';
3
3
  export type { Sort, SortProps, SortState };
4
- export type SortDefinition = SearchAndListingControllerDefinitionWithoutProps<Sort>;
5
4
  /**
6
5
  * Defines a `Sort` controller instance.
7
6
  * @group Definers
@@ -9,4 +8,4 @@ export type SortDefinition = SearchAndListingControllerDefinitionWithoutProps<So
9
8
  * @param props - The configurable `Sort` properties.
10
9
  * @returns The `Sort` controller definition.
11
10
  */
12
- export declare function defineSort(props?: SortProps): SortDefinition;
11
+ export declare function defineSort<TOptions extends ControllerDefinitionOption | undefined>(props?: SortProps & TOptions): SubControllerDefinitionWithoutProps<Sort, TOptions>;
@@ -2,7 +2,8 @@ import { type StandaloneSearchBox, type StandaloneSearchBoxState } from '../../.
2
2
  import type { StandaloneSearchBoxProps } from '../../../../controllers/standalone-search-box/headless-standalone-search-box.js';
3
3
  import type { ListingAndStandaloneControllerWithoutProps } from '../../types/controller-definitions.js';
4
4
  export type { StandaloneSearchBoxState, StandaloneSearchBox, StandaloneSearchBoxProps, };
5
- export type StandaloneSearchBoxDefinition = ListingAndStandaloneControllerWithoutProps<StandaloneSearchBox>;
5
+ export interface StandaloneSearchBoxDefinition extends ListingAndStandaloneControllerWithoutProps<StandaloneSearchBox> {
6
+ }
6
7
  /**
7
8
  * Defines the `StandaloneSearchBox` controller for the purpose of server-side rendering.
8
9
  * @group Definers
@@ -2,13 +2,12 @@ import type { Summary, SummaryState } from '../../../../controllers/commerce/cor
2
2
  import type { ProductListingSummaryState } from '../../../../controllers/commerce/product-listing/summary/headless-product-listing-summary.js';
3
3
  import type { RecommendationsSummaryState } from '../../../../controllers/commerce/recommendations/summary/headless-recommendations-summary.js';
4
4
  import type { SearchSummaryState } from '../../../../controllers/commerce/search/summary/headless-search-summary.js';
5
- import type { SearchAndListingControllerDefinitionWithoutProps } from '../../types/controller-definitions.js';
5
+ import type { ControllerDefinitionOption, SubControllerDefinitionWithoutProps } from '../../types/controller-definitions.js';
6
6
  export type { Summary, ProductListingSummaryState, RecommendationsSummaryState, SearchSummaryState, SummaryState, };
7
- export type SummaryDefinition = SearchAndListingControllerDefinitionWithoutProps<Summary<ProductListingSummaryState | SearchSummaryState | RecommendationsSummaryState>>;
8
7
  /**
9
8
  * Defines a `Summary` controller instance.
10
9
  * @group Definers
11
10
  *
12
11
  * @returns The `Summary` controller definition.
13
12
  */
14
- export declare function defineSummary(): SummaryDefinition;
13
+ export declare function defineSummary<TOptions extends ControllerDefinitionOption | undefined>(options?: TOptions): SubControllerDefinitionWithoutProps<Summary<ProductListingSummaryState | SearchSummaryState | RecommendationsSummaryState>, TOptions>;
@@ -1,7 +1,8 @@
1
1
  import type { NotifyTrigger, NotifyTriggerState } from '../../../../controllers/core/triggers/headless-core-notify-trigger.js';
2
2
  import type { SearchAndListingControllerDefinitionWithoutProps } from '../../types/controller-definitions.js';
3
3
  export type { NotifyTrigger, NotifyTriggerState };
4
- export type NotifyTriggerDefinition = SearchAndListingControllerDefinitionWithoutProps<NotifyTrigger>;
4
+ export interface NotifyTriggerDefinition extends SearchAndListingControllerDefinitionWithoutProps<NotifyTrigger> {
5
+ }
5
6
  /**
6
7
  * Defines the `NotifyTrigger` controller for the purpose of server-side rendering.
7
8
  * @group Definers
@@ -2,7 +2,8 @@ import type { QueryTrigger } from '../../../../controllers/core/triggers/headles
2
2
  import type { SearchOnlyControllerDefinitionWithoutProps } from '../../types/controller-definitions.js';
3
3
  export type { QueryTriggerState } from '../../../../controllers/core/triggers/headless-core-query-trigger.js';
4
4
  export type { QueryTrigger };
5
- export type QueryTriggerDefinition = SearchOnlyControllerDefinitionWithoutProps<QueryTrigger>;
5
+ export interface QueryTriggerDefinition extends SearchOnlyControllerDefinitionWithoutProps<QueryTrigger> {
6
+ }
6
7
  /**
7
8
  * Defines the `QueryTrigger` controller for the purpose of server-side rendering.
8
9
  * @group Definers
@@ -1,7 +1,8 @@
1
1
  import type { RedirectionTrigger, RedirectionTriggerState } from '../../../../controllers/core/triggers/headless-core-redirection-trigger.js';
2
2
  import type { SearchOnlyControllerDefinitionWithoutProps } from '../../types/controller-definitions.js';
3
3
  export type { RedirectionTrigger, RedirectionTriggerState };
4
- export type RedirectionTriggerDefinition = SearchOnlyControllerDefinitionWithoutProps<RedirectionTrigger>;
4
+ export interface RedirectionTriggerDefinition extends SearchOnlyControllerDefinitionWithoutProps<RedirectionTrigger> {
5
+ }
5
6
  /**
6
7
  * Defines the `RedirectionTrigger` controller for the purpose of server-side rendering.
7
8
  * @group Definers
@@ -1,4 +1,5 @@
1
1
  import type { Controller } from '../../../controllers/controller/headless-controller.js';
2
+ import type { InvalidControllerDefinition } from '../../common/errors.js';
2
3
  import type { InferControllerStaticStateFromController, InferControllerStaticStateMapFromControllers } from '../../common/types/controller-inference.js';
3
4
  import type { ControllersPropsMap } from '../../common/types/controllers.js';
4
5
  import type { HasKey, HasRequiredKeys, OptionsTuple } from '../../common/types/utilities.js';
@@ -7,7 +8,7 @@ import type { ContextDefinition } from '../controllers/context/headless-context.
7
8
  import type { ParameterManagerDefinition } from '../controllers/parameter-manager/headless-core-parameter-manager.ssr.js';
8
9
  import type { SSRCommerceEngine } from '../factories/build-factory.js';
9
10
  import { type recommendationInternalOptionKey, SolutionType } from './controller-constants.js';
10
- import type { ListingAndStandaloneController, NonRecommendationController, RecommendationOnlyController, SearchAndListingController, SearchOnlyController, UniversalController } from './controller-scopes.js';
11
+ import type { ListingAndStandaloneController, ListingOnlyController, NonRecommendationController, RecommendationOnlyController, SearchAndListingController, SearchOnlyController, UniversalController } from './controller-scopes.js';
11
12
  import type { HydratedState } from './hydrate-static-state.js';
12
13
  import type { Kind } from './kind.js';
13
14
  import type { HasSolutionType } from './utilities.js';
@@ -47,7 +48,10 @@ export interface ControllerDefinitionsMap<TController extends Controller> {
47
48
  [customName: string]: ControllerDefinition<TController>;
48
49
  }
49
50
  type BakedInControllerDefinitions = {
50
- parameterManager: ParameterManagerDefinition;
51
+ parameterManager: ParameterManagerDefinition<{
52
+ listing: true;
53
+ search: true;
54
+ }>;
51
55
  context: ContextDefinition;
52
56
  cart: CartDefinition;
53
57
  };
@@ -89,10 +93,51 @@ export type IsRecommendationController<TController extends ControllerDefinition<
89
93
  type DefaultControllerProps<TControllers extends ControllerDefinitionsMap<Controller>, TControllersPropsMap extends ControllersPropsMap, K extends keyof TControllers> = {
90
94
  [I in keyof TControllersPropsMap as I extends K ? I : never]: TControllersPropsMap[I];
91
95
  };
96
+ export interface ControllerDefinitionOption {
97
+ /**
98
+ * Whether the controller will be used in a product listing context.
99
+ * @defaultValue true
100
+ */
101
+ listing?: boolean;
102
+ /**
103
+ * Whether the controller will be used in a search page context.
104
+ * @defaultValue true
105
+ */
106
+ search?: boolean;
107
+ }
92
108
  export type SearchOnlyControllerDefinitionWithoutProps<TController extends Controller> = ControllerDefinitionWithoutProps<TController> & SearchOnlyController;
109
+ type SearchOnlyControllerDefinitionWithProps<TController extends Controller, TProps> = ControllerDefinitionWithProps<TController, TProps> & SearchOnlyController;
93
110
  export type ListingAndStandaloneControllerWithoutProps<TController extends Controller> = ControllerDefinitionWithoutProps<TController> & ListingAndStandaloneController;
111
+ type ListingOnlyControllerDefinitionWithoutProps<TController extends Controller> = ControllerDefinitionWithoutProps<TController> & ListingOnlyController;
112
+ type ListingOnlyControllerDefinitionWithProps<TController extends Controller, TProps> = ControllerDefinitionWithProps<TController, TProps> & ListingOnlyController;
94
113
  export type RecommendationOnlyControllerDefinitionWithProps<TController extends Controller, TProps> = ControllerDefinitionWithProps<TController, TProps> & RecommendationOnlyController;
95
114
  export type NonRecommendationControllerDefinitionWithoutProps<TController extends Controller> = ControllerDefinitionWithoutProps<TController> & NonRecommendationController;
96
115
  export type UniversalControllerDefinitionWithProps<TController extends Controller, TProps> = ControllerDefinitionWithProps<TController, TProps> & UniversalController;
97
116
  export type SearchAndListingControllerDefinitionWithoutProps<TController extends Controller> = ControllerDefinitionWithoutProps<TController> & SearchAndListingController;
98
- export type SearchAndListingControllerDefinitionWithProps<TController extends Controller, TProps> = ControllerDefinitionWithProps<TController, TProps> & SearchAndListingController;
117
+ type SearchAndListingControllerDefinitionWithProps<TController extends Controller, TProps> = ControllerDefinitionWithProps<TController, TProps> & SearchAndListingController;
118
+ export type SubControllerDefinitionWithoutProps<TController extends Controller, TDefinition extends ControllerDefinitionOption | undefined> = TDefinition extends {
119
+ listing?: true;
120
+ search?: true;
121
+ } | undefined ? SearchAndListingControllerDefinitionWithoutProps<TController> : TDefinition extends {
122
+ listing?: true;
123
+ search?: false;
124
+ } ? ListingOnlyControllerDefinitionWithoutProps<TController> : TDefinition extends {
125
+ listing?: false;
126
+ search?: true;
127
+ } ? SearchOnlyControllerDefinitionWithoutProps<TController> : TDefinition extends {
128
+ listing: false;
129
+ search: false;
130
+ } ? InvalidControllerDefinition : never;
131
+ export type SubControllerDefinitionWithProps<TController extends Controller, TDefinition extends ControllerDefinitionOption | undefined, TProps> = TDefinition extends {
132
+ listing?: true;
133
+ search?: true;
134
+ } | undefined ? SearchAndListingControllerDefinitionWithProps<TController, TProps> : TDefinition extends {
135
+ listing?: true;
136
+ search?: false;
137
+ } ? ListingOnlyControllerDefinitionWithProps<TController, TProps> : TDefinition extends {
138
+ listing?: false;
139
+ search?: true;
140
+ } ? SearchOnlyControllerDefinitionWithProps<TController, TProps> : TDefinition extends {
141
+ listing: false;
142
+ search: false;
143
+ } ? InvalidControllerDefinition : never;
@@ -41,7 +41,7 @@ export interface SearchEngineDefinition<TEngine extends CoreEngine | CoreEngineN
41
41
  setNavigatorContextProvider: (navigatorContextProvider: NavigatorContextProvider) => void;
42
42
  }
43
43
  /**
44
- * This type defines the required and optional controller props for the commerce engine definition.
44
+ * This type defines the required and optional controller props for the search engine definition.
45
45
  */
46
46
  export type SearchEngineDefinitionControllersPropsOption<TControllersPropsMap extends ControllersPropsMap> = HasKeys<TControllersPropsMap> extends false ? {} : {
47
47
  controllers: TControllersPropsMap;
@@ -1,6 +1,7 @@
1
1
  import { clone, filterObject, mapObject } from '../../utils/utils.js';
2
2
  import { ControllerBuilder } from '../common/builders/controller-builder.js';
3
3
  import { createStaticControllerBuilder } from '../common/builders/static-controller-builder.js';
4
+ import { InvalidControllerDefinition } from '../common/errors.js';
4
5
  export function createStaticState({ searchActions, controllers, }) {
5
6
  return {
6
7
  controllers: mapObject(controllers, (controller) => createStaticControllerBuilder(controller).build()),
@@ -22,3 +23,8 @@ export function buildControllerDefinitions({ definitionsMap, engine, solutionTyp
22
23
  });
23
24
  return filterObject(controllerMap, (value) => value !== null);
24
25
  }
26
+ export function ensureAtLeastOneSolutionType(options) {
27
+ if (options?.listing === false && options?.search === false) {
28
+ throw new InvalidControllerDefinition();
29
+ }
30
+ }
@@ -1,5 +1,6 @@
1
1
  import { buildProductListing } from '../../../../controllers/commerce/product-listing/headless-product-listing.js';
2
2
  import { buildSearch } from '../../../../controllers/commerce/search/headless-search.js';
3
+ import { ensureAtLeastOneSolutionType } from '../../controller-utils.js';
3
4
  import { SolutionType } from '../../types/controller-constants.js';
4
5
  /**
5
6
  * Defines a `BreadcrumbManager` controller instance.
@@ -7,10 +8,12 @@ import { SolutionType } from '../../types/controller-constants.js';
7
8
  *
8
9
  * @returns The `BreadcrumbManager` controller definition.
9
10
  */
10
- export function defineBreadcrumbManager() {
11
+ export function defineBreadcrumbManager(options) {
12
+ ensureAtLeastOneSolutionType(options);
11
13
  return {
12
14
  listing: true,
13
15
  search: true,
16
+ ...options,
14
17
  build: (engine, solutionType) => solutionType === SolutionType.listing
15
18
  ? buildProductListing(engine).breadcrumbManager()
16
19
  : buildSearch(engine).breadcrumbManager(),