@coveo/headless 3.29.1 → 3.29.2-pre.1386439450

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 (47) hide show
  1. package/dist/cjs/case-assist/headless.cjs +1 -1
  2. package/dist/cjs/case-assist/node.cjs.stats.json +1 -1
  3. package/dist/cjs/commerce/headless.cjs +1 -1
  4. package/dist/cjs/commerce/node.cjs.stats.json +1 -1
  5. package/dist/cjs/headless.cjs +1 -1
  6. package/dist/cjs/insight/headless.cjs +1 -1
  7. package/dist/cjs/insight/node.cjs.stats.json +1 -1
  8. package/dist/cjs/node.cjs.stats.json +1 -1
  9. package/dist/cjs/recommendation/headless.cjs +1 -1
  10. package/dist/cjs/recommendation/node.cjs.stats.json +1 -1
  11. package/dist/cjs/ssr/headless.cjs +1 -1
  12. package/dist/cjs/ssr/node.cjs.stats.json +1 -1
  13. package/dist/cjs/ssr-commerce/headless.cjs +1 -1
  14. package/dist/cjs/ssr-commerce/node.cjs.stats.json +1 -1
  15. package/dist/cjs/ssr-commerce-next/headless.cjs +1 -1
  16. package/dist/cjs/ssr-commerce-next/node.cjs.stats.json +1 -1
  17. package/dist/cjs/ssr-next/headless.cjs +1 -1
  18. package/dist/cjs/ssr-next/node.cjs.stats.json +1 -1
  19. package/dist/definitions/ssr-next/commerce/factories/hydrated-state-factory.d.ts +2 -1
  20. package/dist/definitions/ssr-next/commerce/types/build.d.ts +2 -9
  21. package/dist/definitions/ssr-next/commerce/types/fetch-static-state.d.ts +1 -1
  22. package/dist/definitions/ssr-next/commerce/types/hydrate-static-state.d.ts +2 -1
  23. package/dist/definitions/ssr-next/commerce/utils/controller-wiring.d.ts +32 -2
  24. package/dist/definitions/ssr-next/commerce/utils/engine-wiring.d.ts +1 -1
  25. package/dist/esm/ssr-next/commerce/factories/hydrated-state-factory.js +1 -3
  26. package/dist/esm/ssr-next/commerce/factories/recommendation-hydrated-state-factory.js +1 -3
  27. package/dist/esm/ssr-next/commerce/factories/recommendation-static-state-factory.js +6 -1
  28. package/dist/esm/ssr-next/commerce/factories/static-state-factory.js +4 -1
  29. package/dist/esm/ssr-next/commerce/utils/controller-wiring.js +144 -3
  30. package/dist/esm/ssr-next/commerce/utils/engine-wiring.js +9 -3
  31. package/dist/esm/utils/version.js +1 -1
  32. package/dist/quantic/browser.cjs.stats.json +1 -1
  33. package/dist/quantic/case-assist/browser.cjs.stats.json +1 -1
  34. package/dist/quantic/case-assist/headless.js +1 -1
  35. package/dist/quantic/case-assist/headless.js.map +1 -1
  36. package/dist/quantic/commerce/browser.cjs.stats.json +1 -1
  37. package/dist/quantic/commerce/headless.js +1 -1
  38. package/dist/quantic/commerce/headless.js.map +1 -1
  39. package/dist/quantic/headless.js +1 -1
  40. package/dist/quantic/headless.js.map +1 -1
  41. package/dist/quantic/insight/browser.cjs.stats.json +1 -1
  42. package/dist/quantic/insight/headless.js +1 -1
  43. package/dist/quantic/insight/headless.js.map +1 -1
  44. package/dist/quantic/recommendation/browser.cjs.stats.json +1 -1
  45. package/dist/quantic/recommendation/headless.js +1 -1
  46. package/dist/quantic/recommendation/headless.js.map +1 -1
  47. package/package.json +1 -1
@@ -1,4 +1,5 @@
1
1
  import type { SolutionType } from '../types/controller-constants.js';
2
+ import type { AugmentedControllerDefinition } from '../types/controller-definitions.js';
2
3
  import type { CommerceControllerDefinitionsMap, HydrateStaticStateFunction } from '../types/engine.js';
3
4
  import { type CommerceEngineDefinitionOptions } from './build-factory.js';
4
- export declare function hydratedStaticStateFactory<TControllerDefinitions extends CommerceControllerDefinitionsMap>(controllerDefinitions: TControllerDefinitions, options: CommerceEngineDefinitionOptions<TControllerDefinitions>): (solutionType: SolutionType) => HydrateStaticStateFunction<TControllerDefinitions>;
5
+ export declare function hydratedStaticStateFactory<TControllerDefinitions extends CommerceControllerDefinitionsMap>(controllerDefinitions: AugmentedControllerDefinition<TControllerDefinitions>, options: CommerceEngineDefinitionOptions<TControllerDefinitions>): (solutionType: SolutionType) => HydrateStaticStateFunction<TControllerDefinitions>;
@@ -1,10 +1,9 @@
1
- import type { CurrencyCodeISO4217 } from '@coveo/relay-event-types';
2
1
  import type { CommerceEngineOptions } from '../../../app/commerce-engine/commerce-engine.js';
3
2
  import type { Controller } from '../../../controllers/controller/headless-controller.js';
4
3
  import type { ControllersMap, ControllersPropsMap } from '../../common/types/controllers.js';
5
4
  import type { OptionsTuple } from '../../common/types/utilities.js';
6
5
  import type { CartInitialState } from '../controllers/cart/headless-cart.ssr.js';
7
- import type { UserLocation } from '../controllers/context/headless-context.ssr.js';
6
+ import type { ContextOptions } from '../controllers/context/headless-context.ssr.js';
8
7
  import type { ParameterManagerState, Parameters } from '../controllers/parameter-manager/headless-core-parameter-manager.ssr.js';
9
8
  import type { SolutionType } from './controller-constants.js';
10
9
  import type { ControllerDefinitionsMap, EngineDefinitionControllersPropsOption } from './controller-definitions.js';
@@ -22,13 +21,7 @@ export interface ListingBuildConfig extends CommonBuildConfig {
22
21
  export interface StandaloneBuildConfig extends CommonBuildConfig {
23
22
  }
24
23
  export interface CommonBuildConfig {
25
- context: {
26
- url: string;
27
- language: string;
28
- country: string;
29
- currency: CurrencyCodeISO4217;
30
- location?: UserLocation;
31
- };
24
+ context: ContextOptions;
32
25
  searchParams?: ParameterManagerState<Parameters>['parameters'];
33
26
  cart?: CartInitialState;
34
27
  }
@@ -10,4 +10,4 @@ import type { EngineStaticState } from './engine.js';
10
10
  *
11
11
  * Useful for static generation and server-side rendering.
12
12
  */
13
- export type FetchStaticState<TSearchAction extends UnknownAction, TControllersStaticState extends ControllerStaticStateMap, TControllersProps extends ControllersPropsMap, TControllersDefinitionsMap extends ControllerDefinitionsMap<Controller>, TSolutionType extends SolutionType> = (...params: OptionsTuple<BuildConfig<TSolutionType> & EngineDefinitionControllersPropsOption<TControllersDefinitionsMap, TControllersProps, TSolutionType>>) => Promise<EngineStaticState<TSearchAction, TControllersStaticState & FilteredBakedInControllers<TSolutionType>>>;
13
+ export type FetchStaticState<TSearchAction extends UnknownAction, TControllersStaticState extends ControllerStaticStateMap, TControllersProps extends ControllersPropsMap, TControllersDefinitionsMap extends ControllerDefinitionsMap<Controller>, TSolutionType extends SolutionType> = (...params: OptionsTuple<BuildConfig<TSolutionType> & EngineDefinitionControllersPropsOption<TControllersDefinitionsMap, TControllersProps, TSolutionType>>) => Promise<EngineStaticState<TSearchAction, TControllersStaticState & FilteredBakedInControllers<TSolutionType>> & BuildConfig<TSolutionType>>;
@@ -3,6 +3,7 @@ import type { Controller } from '../../../controllers/controller/headless-contro
3
3
  import type { ControllersMap, ControllersPropsMap } from '../../common/types/controllers.js';
4
4
  import type { HydratedState } from '../../common/types/hydrate-static-state.js';
5
5
  import type { SSRCommerceEngine } from '../factories/build-factory.js';
6
+ import type { BuildConfig } from './build.js';
6
7
  import type { SolutionType } from './controller-constants.js';
7
8
  import type { ControllerDefinitionsMap, EngineDefinitionControllersPropsOption, OptionsTuple } from './controller-definitions.js';
8
9
  export interface HydrateStaticStateOptions<TSearchAction> {
@@ -13,4 +14,4 @@ export interface HydrateStaticStateOptions<TSearchAction> {
13
14
  *
14
15
  * Useful when hydrating a server-side-rendered engine.
15
16
  */
16
- export type HydrateStaticState<TControllers extends ControllersMap, TSearchAction extends UnknownAction, TControllersProps extends ControllersPropsMap, TControllersDefinitionsMap extends ControllerDefinitionsMap<Controller>, TSolutionType extends SolutionType> = (...params: OptionsTuple<HydrateStaticStateOptions<TSearchAction> & EngineDefinitionControllersPropsOption<TControllersDefinitionsMap, TControllersProps, TSolutionType>>) => Promise<HydratedState<SSRCommerceEngine, TControllers>>;
17
+ export type HydrateStaticState<TControllers extends ControllersMap, TSearchAction extends UnknownAction, TControllersProps extends ControllersPropsMap, TControllersDefinitionsMap extends ControllerDefinitionsMap<Controller>, TSolutionType extends SolutionType> = (...params: OptionsTuple<HydrateStaticStateOptions<TSearchAction> & BuildConfig<TSolutionType> & EngineDefinitionControllersPropsOption<TControllersDefinitionsMap, TControllersProps, TSolutionType>>) => Promise<HydratedState<SSRCommerceEngine, TControllers>>;
@@ -1,8 +1,38 @@
1
+ /**
2
+ * Controller Wiring Utilities
3
+ *
4
+ * Transforms simple user configuration into complex internal controller structures.
5
+ */
6
+ import { Schema } from '@coveo/bueno';
1
7
  import type { ControllersPropsMap } from '../../common/types/controllers.js';
2
8
  import type { BuildConfig } from '../types/build.js';
3
- import type { SolutionType } from '../types/controller-constants.js';
9
+ import { SolutionType } from '../types/controller-constants.js';
4
10
  import type { InferControllerPropsMapFromDefinitions } from '../types/controller-inference.js';
5
11
  import type { CommerceControllerDefinitionsMap } from '../types/engine.js';
6
- export declare function wireControllerParams<TControllerDefinitions extends CommerceControllerDefinitionsMap>(_solutionType: SolutionType, _controllerDefinitions: TControllerDefinitions, _paramsObject: BuildConfig<SolutionType> & {
12
+ export declare const listingDefinitionSchema: Schema<{
13
+ searchParams: unknown;
14
+ context: unknown;
15
+ }>;
16
+ export declare const searchDefinitionSchema: Schema<{
17
+ searchParams: unknown;
18
+ context: unknown;
19
+ }>;
20
+ export declare const standaloneDefinitionSchema: Schema<{
21
+ context: unknown;
22
+ }>;
23
+ export declare const recommendationsDefinitionSchema: Schema<{
24
+ context: unknown;
25
+ }>;
26
+ /**
27
+ * Converts simple user configuration (URL, language, currency, query) into the
28
+ * nested structure required by the internal {@link Build} method. Automatically generates
29
+ * appropriate controllers (context, cart, parameterManager) transparently.
30
+ *
31
+ * @param solutionType - The type of solution (search, listing, recommendation, standalone)
32
+ * @param controllerDefinitions - Map of controller definitions to be initialized
33
+ * @param buildConfig - Simple configuration object with simplified controller properties
34
+ * @returns Formatted and validated controller properties map defined for the controller in the definition
35
+ */
36
+ export declare function wireControllerParams<TControllerDefinitions extends CommerceControllerDefinitionsMap>(solutionType: SolutionType, controllerDefinitions: TControllerDefinitions, buildConfig: BuildConfig<SolutionType> & {
7
37
  controllers?: ControllersPropsMap;
8
38
  }): InferControllerPropsMapFromDefinitions<TControllerDefinitions>;
@@ -2,4 +2,4 @@ import type { CommerceEngineConfiguration } from '../../../app/commerce-engine/c
2
2
  import type { CommerceEngineDefinitionOptions } from '../factories/build-factory.js';
3
3
  import type { CommonBuildConfig } from '../types/build.js';
4
4
  import type { CommerceControllerDefinitionsMap } from '../types/engine.js';
5
- export declare function extendEngineConfiguration<TControllerDefinitions extends CommerceControllerDefinitionsMap>(_configuration: CommerceEngineDefinitionOptions<TControllerDefinitions>['configuration'], _commonBuildOptions: CommonBuildConfig): CommerceEngineConfiguration;
5
+ export declare function extendEngineConfiguration<TControllerDefinitions extends CommerceControllerDefinitionsMap>(configuration: CommerceEngineDefinitionOptions<TControllerDefinitions>['configuration'], commonBuildOptions: CommonBuildConfig): CommerceEngineConfiguration;
@@ -2,9 +2,7 @@ import { buildFactory, } from './build-factory.js';
2
2
  export function hydratedStaticStateFactory(controllerDefinitions, options) {
3
3
  return (solutionType) => async (...params) => {
4
4
  const solutionTypeBuild = await buildFactory(controllerDefinitions, options)(solutionType);
5
- const { engine, controllers } = await solutionTypeBuild(
6
- // @ts-expect-error: TODO: KIT-4742: the wiring will fix also the type inconsistencies
7
- ...params);
5
+ const { engine, controllers } = await solutionTypeBuild(...params);
8
6
  params[0].searchActions.forEach((action) => {
9
7
  engine.dispatch(action);
10
8
  });
@@ -3,9 +3,7 @@ import { buildFactory, } from './build-factory.js';
3
3
  export function hydratedRecommendationStaticStateFactory(controllerDefinitions, options) {
4
4
  return async (...params) => {
5
5
  const solutionTypeBuild = await buildFactory(controllerDefinitions, options)(SolutionType.recommendation);
6
- const { engine, controllers } = (await solutionTypeBuild(
7
- // @ts-expect-error: TODO: KIT-4742: the wiring will fix also the type inconsistencies
8
- ...params));
6
+ const { engine, controllers } = (await solutionTypeBuild(...params));
9
7
  params[0].searchActions.forEach((action) => {
10
8
  engine.dispatch(action);
11
9
  });
@@ -4,6 +4,7 @@ import { SolutionType } from '../types/controller-constants.js';
4
4
  import { filterRecommendationControllers } from '../utils/recommendation-filter.js';
5
5
  import { buildFactory, } from './build-factory.js';
6
6
  export function fetchRecommendationStaticStateFactory(controllerDefinitions, options) {
7
+ // TODO: KIT-4619: no longer the right way to get the allowed recommendation keys
7
8
  const getAllowedRecommendationKeys = (props) => {
8
9
  if (props && 'controllers' in props) {
9
10
  const enabledRecommendationControllers = filterObject(props.controllers, (value) => Boolean(value.enabled));
@@ -18,9 +19,13 @@ export function fetchRecommendationStaticStateFactory(controllerDefinitions, opt
18
19
  const { engine, controllers } = (await solutionTypeBuild(...params));
19
20
  filterRecommendationControllers(controllers, controllerDefinitions ?? {}).refresh(allowedRecommendationKeys);
20
21
  const searchActions = await Promise.all(engine.waitForRequestCompletedAction());
21
- return createStaticState({
22
+ const staticState = createStaticState({
22
23
  searchActions,
23
24
  controllers,
24
25
  });
26
+ return {
27
+ ...params[0], // TODO: KIT-4754: remove index access after no longer relying on OptionTuple type
28
+ ...staticState,
29
+ };
25
30
  };
26
31
  }
@@ -27,6 +27,9 @@ export function fetchStaticStateFactory(controllerDefinitions, options) {
27
27
  searchActions,
28
28
  controllers,
29
29
  });
30
- return staticState;
30
+ return {
31
+ ...params[0], // TODO: KIT-4754: remove index access after no longer relying on OptionTuple type
32
+ ...staticState,
33
+ };
31
34
  };
32
35
  }
@@ -1,4 +1,145 @@
1
- export function wireControllerParams(_solutionType, _controllerDefinitions, _paramsObject) {
2
- // TODO: KIT-4742: Implement
3
- return {};
1
+ /**
2
+ * Controller Wiring Utilities
3
+ *
4
+ * Transforms simple user configuration into complex internal controller structures.
5
+ */
6
+ import { RecordValue, Schema } from '@coveo/bueno';
7
+ import { contextDefinition } from '../../../features/commerce/context/context-validation.js';
8
+ import { parametersDefinition } from '../../../features/commerce/parameters/parameters-schema.js';
9
+ import { requiredEmptyAllowedString } from '../../../utils/validate-payload.js';
10
+ import { SolutionType } from '../types/controller-constants.js';
11
+ const requiredDefinition = {
12
+ context: new RecordValue({
13
+ options: { required: true },
14
+ values: contextDefinition,
15
+ }),
16
+ };
17
+ const listingDefinition = {
18
+ ...requiredDefinition,
19
+ searchParams: new RecordValue({
20
+ values: parametersDefinition,
21
+ }),
22
+ };
23
+ const standaloneDefinition = {
24
+ ...requiredDefinition,
25
+ };
26
+ const searchDefinition = {
27
+ ...requiredDefinition,
28
+ searchParams: new RecordValue({
29
+ options: { required: true },
30
+ values: { query: requiredEmptyAllowedString, ...parametersDefinition },
31
+ }),
32
+ };
33
+ const recommendationsDefinition = {
34
+ ...requiredDefinition,
35
+ // recommendation: // TODO: KIT-4619: support array of recommendations
36
+ };
37
+ export const listingDefinitionSchema = new Schema(listingDefinition);
38
+ export const searchDefinitionSchema = new Schema(searchDefinition);
39
+ export const standaloneDefinitionSchema = new Schema(standaloneDefinition);
40
+ export const recommendationsDefinitionSchema = new Schema(recommendationsDefinition);
41
+ /**
42
+ * Validates the build configuration based on the solution type.
43
+ */
44
+ function validateBuildConfig(solutionType, buildConfig) {
45
+ const validationMap = {
46
+ [SolutionType.listing]: listingDefinitionSchema,
47
+ [SolutionType.search]: searchDefinitionSchema,
48
+ [SolutionType.standalone]: standaloneDefinitionSchema,
49
+ [SolutionType.recommendation]: recommendationsDefinitionSchema,
50
+ };
51
+ const schema = validationMap[solutionType];
52
+ schema.validate(buildConfig);
53
+ }
54
+ /**
55
+ * Controller wiring class that handles the complete wiring process.
56
+ * Transforms simple user configuration into complex internal controller structures.
57
+ */
58
+ class ControllerWirer {
59
+ buildConfig;
60
+ controllerDefinitions;
61
+ controllerProps;
62
+ constructor(buildConfig, controllerDefinitions, controllerProps) {
63
+ this.buildConfig = buildConfig;
64
+ this.controllerDefinitions = controllerDefinitions;
65
+ this.controllerProps = controllerProps;
66
+ }
67
+ wireParameterManager() {
68
+ if (!this.controllerDefinitions?.parameterManager)
69
+ return;
70
+ const { searchParams } = this.buildConfig;
71
+ const { query, ...rest } = searchParams || {};
72
+ const parameters = {
73
+ ...(query && { q: query }),
74
+ ...(rest && typeof rest === 'object' ? rest : {}),
75
+ };
76
+ this.controllerProps.parameterManager = {
77
+ initialState: { parameters },
78
+ };
79
+ }
80
+ wireContext() {
81
+ if (!this.controllerDefinitions?.context)
82
+ return;
83
+ const { context } = this.buildConfig;
84
+ this.controllerProps.context = {
85
+ initialState: {
86
+ ...context,
87
+ },
88
+ };
89
+ }
90
+ wireCart() {
91
+ if (!this.controllerDefinitions?.cart || !this.buildConfig.cart)
92
+ return;
93
+ this.controllerProps.cart = {
94
+ initialState: this.buildConfig.cart,
95
+ };
96
+ }
97
+ wireRecommendations() {
98
+ // TODO: KIT-4619: wire recommendations
99
+ }
100
+ /**
101
+ * Wires all controllers based on solution type and controller definitions.
102
+ * Handles the complete wiring process in a sequential manner.
103
+ */
104
+ wire(solutionType) {
105
+ // Wire common controllers that apply to all solution types
106
+ this.wireCart();
107
+ this.wireContext();
108
+ // Wire solution-specific controllers
109
+ switch (solutionType) {
110
+ case SolutionType.search:
111
+ case SolutionType.listing: {
112
+ this.wireParameterManager();
113
+ break;
114
+ }
115
+ case SolutionType.recommendation: {
116
+ this.wireRecommendations();
117
+ break;
118
+ }
119
+ case SolutionType.standalone:
120
+ // No additional wiring needed for standalone
121
+ break;
122
+ default: {
123
+ // Exhaustive check - TypeScript will error if we miss a case
124
+ const _exhaustiveCheck = solutionType;
125
+ throw new Error(`Unsupported solution type: ${_exhaustiveCheck}`);
126
+ }
127
+ }
128
+ }
129
+ }
130
+ /**
131
+ * Converts simple user configuration (URL, language, currency, query) into the
132
+ * nested structure required by the internal {@link Build} method. Automatically generates
133
+ * appropriate controllers (context, cart, parameterManager) transparently.
134
+ *
135
+ * @param solutionType - The type of solution (search, listing, recommendation, standalone)
136
+ * @param controllerDefinitions - Map of controller definitions to be initialized
137
+ * @param buildConfig - Simple configuration object with simplified controller properties
138
+ * @returns Formatted and validated controller properties map defined for the controller in the definition
139
+ */
140
+ export function wireControllerParams(solutionType, controllerDefinitions, buildConfig) {
141
+ validateBuildConfig(solutionType, buildConfig);
142
+ const controllerProps = buildConfig.controllers ?? {};
143
+ new ControllerWirer(buildConfig, controllerDefinitions, controllerProps).wire(solutionType);
144
+ return controllerProps;
4
145
  }
@@ -1,4 +1,10 @@
1
- export function extendEngineConfiguration(_configuration, _commonBuildOptions) {
2
- // TODO: KIT-4742: Implement: wire engine configuration with validation
3
- return {};
1
+ export function extendEngineConfiguration(configuration, commonBuildOptions) {
2
+ const { cart, context } = commonBuildOptions;
3
+ return {
4
+ ...configuration,
5
+ context: {
6
+ ...context,
7
+ },
8
+ cart,
9
+ };
4
10
  }
@@ -1,2 +1,2 @@
1
- export const VERSION = "3.29.1" || 'Test version';
1
+ export const VERSION = "3.29.2-pre.1386439450" || 'Test version';
2
2
  export const COVEO_FRAMEWORK = ['@coveo/atomic', '@coveo/quantic'];