@sitecore-cloudsdk/search 0.5.0-rc.0

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 (224) hide show
  1. package/README.md +95 -0
  2. package/browser.cjs +3 -0
  3. package/browser.d.ts +2 -0
  4. package/browser.js +3 -0
  5. package/dist/cjs/package.json +40 -0
  6. package/dist/cjs/src/browser.d.ts +32 -0
  7. package/dist/cjs/src/browser.js +53 -0
  8. package/dist/cjs/src/lib/consts.d.ts +38 -0
  9. package/dist/cjs/src/lib/consts.js +49 -0
  10. package/dist/cjs/src/lib/events/entity-view-event.d.ts +22 -0
  11. package/dist/cjs/src/lib/events/entity-view-event.js +51 -0
  12. package/dist/cjs/src/lib/events/interfaces.d.ts +135 -0
  13. package/dist/cjs/src/lib/events/interfaces.js +3 -0
  14. package/dist/cjs/src/lib/events/widget-facet-click-event.d.ts +30 -0
  15. package/dist/cjs/src/lib/events/widget-facet-click-event.js +92 -0
  16. package/dist/cjs/src/lib/events/widget-item-click-event.d.ts +28 -0
  17. package/dist/cjs/src/lib/events/widget-item-click-event.js +72 -0
  18. package/dist/cjs/src/lib/events/widget-navigation-click-event.d.ts +26 -0
  19. package/dist/cjs/src/lib/events/widget-navigation-click-event.js +49 -0
  20. package/dist/cjs/src/lib/events/widget-suggestion-click-event.d.ts +29 -0
  21. package/dist/cjs/src/lib/events/widget-suggestion-click-event.js +75 -0
  22. package/dist/cjs/src/lib/events/widget-view-event.d.ts +28 -0
  23. package/dist/cjs/src/lib/events/widget-view-event.js +75 -0
  24. package/dist/cjs/src/lib/initializer/browser/initializer.d.ts +23 -0
  25. package/dist/cjs/src/lib/initializer/browser/initializer.js +44 -0
  26. package/dist/cjs/src/lib/initializer/server/initializer.d.ts +21 -0
  27. package/dist/cjs/src/lib/initializer/server/initializer.js +39 -0
  28. package/dist/cjs/src/lib/request-entities/context/context.d.ts +141 -0
  29. package/dist/cjs/src/lib/request-entities/context/context.js +273 -0
  30. package/dist/cjs/src/lib/request-entities/context/interfaces.d.ts +106 -0
  31. package/dist/cjs/src/lib/request-entities/context/interfaces.js +2 -0
  32. package/dist/cjs/src/lib/request-entities/filters/base-filter.d.ts +17 -0
  33. package/dist/cjs/src/lib/request-entities/filters/base-filter.js +17 -0
  34. package/dist/cjs/src/lib/request-entities/filters/comparison-filter.d.ts +18 -0
  35. package/dist/cjs/src/lib/request-entities/filters/comparison-filter.js +30 -0
  36. package/dist/cjs/src/lib/request-entities/filters/facet/comparison-facet-filter.d.ts +18 -0
  37. package/dist/cjs/src/lib/request-entities/filters/facet/comparison-facet-filter.js +26 -0
  38. package/dist/cjs/src/lib/request-entities/filters/facet/interfaces.d.ts +21 -0
  39. package/dist/cjs/src/lib/request-entities/filters/facet/interfaces.js +2 -0
  40. package/dist/cjs/src/lib/request-entities/filters/facet/list-facet-filter.d.ts +18 -0
  41. package/dist/cjs/src/lib/request-entities/filters/facet/list-facet-filter.js +26 -0
  42. package/dist/cjs/src/lib/request-entities/filters/facet/logical-facet-filter.d.ts +19 -0
  43. package/dist/cjs/src/lib/request-entities/filters/facet/logical-facet-filter.js +26 -0
  44. package/dist/cjs/src/lib/request-entities/filters/facet/not-facet-filter.d.ts +7 -0
  45. package/dist/cjs/src/lib/request-entities/filters/facet/not-facet-filter.js +22 -0
  46. package/dist/cjs/src/lib/request-entities/filters/geo-filter.d.ts +19 -0
  47. package/dist/cjs/src/lib/request-entities/filters/geo-filter.js +49 -0
  48. package/dist/cjs/src/lib/request-entities/filters/geo-within-filter.d.ts +19 -0
  49. package/dist/cjs/src/lib/request-entities/filters/geo-within-filter.js +44 -0
  50. package/dist/cjs/src/lib/request-entities/filters/interfaces.d.ts +66 -0
  51. package/dist/cjs/src/lib/request-entities/filters/interfaces.js +2 -0
  52. package/dist/cjs/src/lib/request-entities/filters/list-filter.d.ts +18 -0
  53. package/dist/cjs/src/lib/request-entities/filters/list-filter.js +30 -0
  54. package/dist/cjs/src/lib/request-entities/filters/logical-filter.d.ts +16 -0
  55. package/dist/cjs/src/lib/request-entities/filters/logical-filter.js +32 -0
  56. package/dist/cjs/src/lib/request-entities/widgets/interfaces.d.ts +372 -0
  57. package/dist/cjs/src/lib/request-entities/widgets/interfaces.js +2 -0
  58. package/dist/cjs/src/lib/request-entities/widgets/questions-answers-widget-item.d.ts +62 -0
  59. package/dist/cjs/src/lib/request-entities/widgets/questions-answers-widget-item.js +117 -0
  60. package/dist/cjs/src/lib/request-entities/widgets/recommendation-widget-item.d.ts +39 -0
  61. package/dist/cjs/src/lib/request-entities/widgets/recommendation-widget-item.js +84 -0
  62. package/dist/cjs/src/lib/request-entities/widgets/results-widget-item.d.ts +76 -0
  63. package/dist/cjs/src/lib/request-entities/widgets/results-widget-item.js +126 -0
  64. package/dist/cjs/src/lib/request-entities/widgets/rule-widget-item.d.ts +14 -0
  65. package/dist/cjs/src/lib/request-entities/widgets/rule-widget-item.js +71 -0
  66. package/dist/cjs/src/lib/request-entities/widgets/search-widget-item.d.ts +167 -0
  67. package/dist/cjs/src/lib/request-entities/widgets/search-widget-item.js +353 -0
  68. package/dist/cjs/src/lib/request-entities/widgets/utils.d.ts +8 -0
  69. package/dist/cjs/src/lib/request-entities/widgets/utils.js +14 -0
  70. package/dist/cjs/src/lib/request-entities/widgets/widget-item.d.ts +64 -0
  71. package/dist/cjs/src/lib/request-entities/widgets/widget-item.js +114 -0
  72. package/dist/cjs/src/lib/request-entities/widgets/widget-request-data.d.ts +15 -0
  73. package/dist/cjs/src/lib/request-entities/widgets/widget-request-data.js +30 -0
  74. package/dist/cjs/src/lib/requests/browser/entity-view-event.d.ts +6 -0
  75. package/dist/cjs/src/lib/requests/browser/entity-view-event.js +17 -0
  76. package/dist/cjs/src/lib/requests/browser/get-page-widget-data.d.ts +15 -0
  77. package/dist/cjs/src/lib/requests/browser/get-page-widget-data.js +25 -0
  78. package/dist/cjs/src/lib/requests/browser/get-widget-data.d.ts +9 -0
  79. package/dist/cjs/src/lib/requests/browser/get-widget-data.js +21 -0
  80. package/dist/cjs/src/lib/requests/browser/widget-facet-click-event.d.ts +7 -0
  81. package/dist/cjs/src/lib/requests/browser/widget-facet-click-event.js +18 -0
  82. package/dist/cjs/src/lib/requests/browser/widget-item-click-event.d.ts +7 -0
  83. package/dist/cjs/src/lib/requests/browser/widget-item-click-event.js +18 -0
  84. package/dist/cjs/src/lib/requests/browser/widget-navigation-click-event.d.ts +7 -0
  85. package/dist/cjs/src/lib/requests/browser/widget-navigation-click-event.js +18 -0
  86. package/dist/cjs/src/lib/requests/browser/widget-suggestion-click-event.d.ts +7 -0
  87. package/dist/cjs/src/lib/requests/browser/widget-suggestion-click-event.js +18 -0
  88. package/dist/cjs/src/lib/requests/browser/widget-view-event.d.ts +6 -0
  89. package/dist/cjs/src/lib/requests/browser/widget-view-event.js +17 -0
  90. package/dist/cjs/src/lib/requests/post-request.d.ts +57 -0
  91. package/dist/cjs/src/lib/requests/post-request.js +26 -0
  92. package/dist/cjs/src/lib/requests/server/entity-view-event-server.d.ts +8 -0
  93. package/dist/cjs/src/lib/requests/server/entity-view-event-server.js +18 -0
  94. package/dist/cjs/src/lib/requests/server/get-page-widget-data-server.d.ts +15 -0
  95. package/dist/cjs/src/lib/requests/server/get-page-widget-data-server.js +25 -0
  96. package/dist/cjs/src/lib/requests/server/get-widget-data-server.d.ts +8 -0
  97. package/dist/cjs/src/lib/requests/server/get-widget-data-server.js +19 -0
  98. package/dist/cjs/src/lib/requests/server/widget-facet-click-event-server.d.ts +9 -0
  99. package/dist/cjs/src/lib/requests/server/widget-facet-click-event-server.js +19 -0
  100. package/dist/cjs/src/lib/requests/server/widget-item-click-event-server.d.ts +9 -0
  101. package/dist/cjs/src/lib/requests/server/widget-item-click-event-server.js +19 -0
  102. package/dist/cjs/src/lib/requests/server/widget-navigation-click-event-server.d.ts +9 -0
  103. package/dist/cjs/src/lib/requests/server/widget-navigation-click-event-server.js +19 -0
  104. package/dist/cjs/src/lib/requests/server/widget-suggestion-click-event-server.d.ts +9 -0
  105. package/dist/cjs/src/lib/requests/server/widget-suggestion-click-event-server.js +19 -0
  106. package/dist/cjs/src/lib/requests/server/widget-view-event-server.d.ts +9 -0
  107. package/dist/cjs/src/lib/requests/server/widget-view-event-server.js +19 -0
  108. package/dist/cjs/src/lib/types.d.ts +14 -0
  109. package/dist/cjs/src/lib/types.js +2 -0
  110. package/dist/cjs/src/server.d.ts +32 -0
  111. package/dist/cjs/src/server.js +55 -0
  112. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -0
  113. package/dist/esm/package.json +40 -0
  114. package/dist/esm/src/browser.d.ts +32 -0
  115. package/dist/esm/src/browser.js +26 -0
  116. package/dist/esm/src/lib/consts.d.ts +38 -0
  117. package/dist/esm/src/lib/consts.js +43 -0
  118. package/dist/esm/src/lib/events/entity-view-event.d.ts +22 -0
  119. package/dist/esm/src/lib/events/entity-view-event.js +47 -0
  120. package/dist/esm/src/lib/events/interfaces.d.ts +135 -0
  121. package/dist/esm/src/lib/events/interfaces.js +2 -0
  122. package/dist/esm/src/lib/events/widget-facet-click-event.d.ts +30 -0
  123. package/dist/esm/src/lib/events/widget-facet-click-event.js +88 -0
  124. package/dist/esm/src/lib/events/widget-item-click-event.d.ts +28 -0
  125. package/dist/esm/src/lib/events/widget-item-click-event.js +68 -0
  126. package/dist/esm/src/lib/events/widget-navigation-click-event.d.ts +26 -0
  127. package/dist/esm/src/lib/events/widget-navigation-click-event.js +45 -0
  128. package/dist/esm/src/lib/events/widget-suggestion-click-event.d.ts +29 -0
  129. package/dist/esm/src/lib/events/widget-suggestion-click-event.js +71 -0
  130. package/dist/esm/src/lib/events/widget-view-event.d.ts +28 -0
  131. package/dist/esm/src/lib/events/widget-view-event.js +71 -0
  132. package/dist/esm/src/lib/initializer/browser/initializer.d.ts +23 -0
  133. package/dist/esm/src/lib/initializer/browser/initializer.js +38 -0
  134. package/dist/esm/src/lib/initializer/server/initializer.d.ts +21 -0
  135. package/dist/esm/src/lib/initializer/server/initializer.js +33 -0
  136. package/dist/esm/src/lib/request-entities/context/context.d.ts +141 -0
  137. package/dist/esm/src/lib/request-entities/context/context.js +269 -0
  138. package/dist/esm/src/lib/request-entities/context/interfaces.d.ts +106 -0
  139. package/dist/esm/src/lib/request-entities/context/interfaces.js +1 -0
  140. package/dist/esm/src/lib/request-entities/filters/base-filter.d.ts +17 -0
  141. package/dist/esm/src/lib/request-entities/filters/base-filter.js +13 -0
  142. package/dist/esm/src/lib/request-entities/filters/comparison-filter.d.ts +18 -0
  143. package/dist/esm/src/lib/request-entities/filters/comparison-filter.js +26 -0
  144. package/dist/esm/src/lib/request-entities/filters/facet/comparison-facet-filter.d.ts +18 -0
  145. package/dist/esm/src/lib/request-entities/filters/facet/comparison-facet-filter.js +22 -0
  146. package/dist/esm/src/lib/request-entities/filters/facet/interfaces.d.ts +21 -0
  147. package/dist/esm/src/lib/request-entities/filters/facet/interfaces.js +1 -0
  148. package/dist/esm/src/lib/request-entities/filters/facet/list-facet-filter.d.ts +18 -0
  149. package/dist/esm/src/lib/request-entities/filters/facet/list-facet-filter.js +22 -0
  150. package/dist/esm/src/lib/request-entities/filters/facet/logical-facet-filter.d.ts +19 -0
  151. package/dist/esm/src/lib/request-entities/filters/facet/logical-facet-filter.js +22 -0
  152. package/dist/esm/src/lib/request-entities/filters/facet/not-facet-filter.d.ts +7 -0
  153. package/dist/esm/src/lib/request-entities/filters/facet/not-facet-filter.js +18 -0
  154. package/dist/esm/src/lib/request-entities/filters/geo-filter.d.ts +19 -0
  155. package/dist/esm/src/lib/request-entities/filters/geo-filter.js +45 -0
  156. package/dist/esm/src/lib/request-entities/filters/geo-within-filter.d.ts +19 -0
  157. package/dist/esm/src/lib/request-entities/filters/geo-within-filter.js +40 -0
  158. package/dist/esm/src/lib/request-entities/filters/interfaces.d.ts +66 -0
  159. package/dist/esm/src/lib/request-entities/filters/interfaces.js +1 -0
  160. package/dist/esm/src/lib/request-entities/filters/list-filter.d.ts +18 -0
  161. package/dist/esm/src/lib/request-entities/filters/list-filter.js +26 -0
  162. package/dist/esm/src/lib/request-entities/filters/logical-filter.d.ts +16 -0
  163. package/dist/esm/src/lib/request-entities/filters/logical-filter.js +28 -0
  164. package/dist/esm/src/lib/request-entities/widgets/interfaces.d.ts +372 -0
  165. package/dist/esm/src/lib/request-entities/widgets/interfaces.js +1 -0
  166. package/dist/esm/src/lib/request-entities/widgets/questions-answers-widget-item.d.ts +62 -0
  167. package/dist/esm/src/lib/request-entities/widgets/questions-answers-widget-item.js +113 -0
  168. package/dist/esm/src/lib/request-entities/widgets/recommendation-widget-item.d.ts +39 -0
  169. package/dist/esm/src/lib/request-entities/widgets/recommendation-widget-item.js +80 -0
  170. package/dist/esm/src/lib/request-entities/widgets/results-widget-item.d.ts +76 -0
  171. package/dist/esm/src/lib/request-entities/widgets/results-widget-item.js +122 -0
  172. package/dist/esm/src/lib/request-entities/widgets/rule-widget-item.d.ts +14 -0
  173. package/dist/esm/src/lib/request-entities/widgets/rule-widget-item.js +67 -0
  174. package/dist/esm/src/lib/request-entities/widgets/search-widget-item.d.ts +167 -0
  175. package/dist/esm/src/lib/request-entities/widgets/search-widget-item.js +349 -0
  176. package/dist/esm/src/lib/request-entities/widgets/utils.d.ts +8 -0
  177. package/dist/esm/src/lib/request-entities/widgets/utils.js +10 -0
  178. package/dist/esm/src/lib/request-entities/widgets/widget-item.d.ts +64 -0
  179. package/dist/esm/src/lib/request-entities/widgets/widget-item.js +110 -0
  180. package/dist/esm/src/lib/request-entities/widgets/widget-request-data.d.ts +15 -0
  181. package/dist/esm/src/lib/request-entities/widgets/widget-request-data.js +26 -0
  182. package/dist/esm/src/lib/requests/browser/entity-view-event.d.ts +6 -0
  183. package/dist/esm/src/lib/requests/browser/entity-view-event.js +13 -0
  184. package/dist/esm/src/lib/requests/browser/get-page-widget-data.d.ts +15 -0
  185. package/dist/esm/src/lib/requests/browser/get-page-widget-data.js +21 -0
  186. package/dist/esm/src/lib/requests/browser/get-widget-data.d.ts +9 -0
  187. package/dist/esm/src/lib/requests/browser/get-widget-data.js +18 -0
  188. package/dist/esm/src/lib/requests/browser/widget-facet-click-event.d.ts +7 -0
  189. package/dist/esm/src/lib/requests/browser/widget-facet-click-event.js +14 -0
  190. package/dist/esm/src/lib/requests/browser/widget-item-click-event.d.ts +7 -0
  191. package/dist/esm/src/lib/requests/browser/widget-item-click-event.js +14 -0
  192. package/dist/esm/src/lib/requests/browser/widget-navigation-click-event.d.ts +7 -0
  193. package/dist/esm/src/lib/requests/browser/widget-navigation-click-event.js +14 -0
  194. package/dist/esm/src/lib/requests/browser/widget-suggestion-click-event.d.ts +7 -0
  195. package/dist/esm/src/lib/requests/browser/widget-suggestion-click-event.js +14 -0
  196. package/dist/esm/src/lib/requests/browser/widget-view-event.d.ts +6 -0
  197. package/dist/esm/src/lib/requests/browser/widget-view-event.js +13 -0
  198. package/dist/esm/src/lib/requests/post-request.d.ts +57 -0
  199. package/dist/esm/src/lib/requests/post-request.js +22 -0
  200. package/dist/esm/src/lib/requests/server/entity-view-event-server.d.ts +8 -0
  201. package/dist/esm/src/lib/requests/server/entity-view-event-server.js +14 -0
  202. package/dist/esm/src/lib/requests/server/get-page-widget-data-server.d.ts +15 -0
  203. package/dist/esm/src/lib/requests/server/get-page-widget-data-server.js +21 -0
  204. package/dist/esm/src/lib/requests/server/get-widget-data-server.d.ts +8 -0
  205. package/dist/esm/src/lib/requests/server/get-widget-data-server.js +15 -0
  206. package/dist/esm/src/lib/requests/server/widget-facet-click-event-server.d.ts +9 -0
  207. package/dist/esm/src/lib/requests/server/widget-facet-click-event-server.js +15 -0
  208. package/dist/esm/src/lib/requests/server/widget-item-click-event-server.d.ts +9 -0
  209. package/dist/esm/src/lib/requests/server/widget-item-click-event-server.js +15 -0
  210. package/dist/esm/src/lib/requests/server/widget-navigation-click-event-server.d.ts +9 -0
  211. package/dist/esm/src/lib/requests/server/widget-navigation-click-event-server.js +15 -0
  212. package/dist/esm/src/lib/requests/server/widget-suggestion-click-event-server.d.ts +9 -0
  213. package/dist/esm/src/lib/requests/server/widget-suggestion-click-event-server.js +15 -0
  214. package/dist/esm/src/lib/requests/server/widget-view-event-server.d.ts +9 -0
  215. package/dist/esm/src/lib/requests/server/widget-view-event-server.js +15 -0
  216. package/dist/esm/src/lib/types.d.ts +14 -0
  217. package/dist/esm/src/lib/types.js +1 -0
  218. package/dist/esm/src/server.d.ts +32 -0
  219. package/dist/esm/src/server.js +28 -0
  220. package/dist/esm/tsconfig.tsbuildinfo +1 -0
  221. package/package.json +40 -0
  222. package/server.cjs +3 -0
  223. package/server.d.ts +2 -0
  224. package/server.js +3 -0
@@ -0,0 +1,349 @@
1
+ // © Sitecore Corporation A/S. All rights reserved. Sitecore® is a registered trademark of Sitecore Corporation A/S.
2
+ import { ErrorMessages } from '../../consts';
3
+ import { ResultsWidgetItem } from './results-widget-item';
4
+ import { isFacetFilter } from './utils';
5
+ export class SearchWidgetItem extends ResultsWidgetItem {
6
+ /**
7
+ * Creates and holds the functionality of a search widget item.
8
+ * @param entity - The widget's item entity.
9
+ * @param widgetId - The widget's item id.
10
+ * @param searchOptions - The widget's search options object.
11
+ *
12
+ */
13
+ constructor(entity, widgetId, searchOptions) {
14
+ super(entity, widgetId, {
15
+ content: searchOptions?.content,
16
+ filter: searchOptions?.filter,
17
+ groupBy: searchOptions?.groupBy,
18
+ limit: searchOptions?.limit,
19
+ rule: searchOptions?.rule
20
+ });
21
+ if (!searchOptions)
22
+ return;
23
+ if (searchOptions.facet && Object.keys(searchOptions.facet).length) {
24
+ this._validateNumberInRange1To100(ErrorMessages.IV_0014, searchOptions.facet.max);
25
+ this._validateFacetTypes(searchOptions.facet.types);
26
+ this._facet = searchOptions.facet;
27
+ }
28
+ if (searchOptions.query) {
29
+ this._validateQuery(searchOptions.query);
30
+ this._query = searchOptions.query;
31
+ }
32
+ this._validatePositiveInteger(ErrorMessages.IV_0008, searchOptions.offset);
33
+ this._offset = searchOptions.offset;
34
+ this._validatePersonalization(searchOptions.personalization);
35
+ this._personalization = searchOptions.personalization;
36
+ this._validateRanking(searchOptions.ranking);
37
+ this._ranking = searchOptions.ranking;
38
+ this._validateSort(searchOptions.sort);
39
+ this._sort = searchOptions.sort;
40
+ this._validateSuggestion(searchOptions.suggestion);
41
+ this._suggestion = searchOptions.suggestion;
42
+ }
43
+ /**
44
+ * @param personalization - the object of the `personalization` param
45
+ */
46
+ set personalization(personalization) {
47
+ this._validatePersonalization(personalization);
48
+ this._personalization = personalization;
49
+ }
50
+ /**
51
+ * @returns the `personalization` property of the SearchWidgetItem
52
+ */
53
+ get personalization() {
54
+ return this._personalization;
55
+ }
56
+ /**
57
+ * sets the `personalization` property to undefined of the SearchWidgetItem
58
+ */
59
+ resetPersonalization() {
60
+ this._personalization = undefined;
61
+ }
62
+ /**
63
+ *
64
+ * @param personalization - the object of the `personalization` property
65
+ * @throws IV_0030 if `personalization.attributes` contains an empty or whitespace string
66
+ * @throws IV_0031 if `personalization.ids` contains an empty string
67
+ */
68
+ _validatePersonalization(personalization) {
69
+ if (!personalization)
70
+ return;
71
+ personalization.attributes.forEach((attribute) => {
72
+ this._validateNonEmptyNoWhitespaceString(ErrorMessages.IV_0030, attribute);
73
+ });
74
+ if (personalization.algorithm === 'mlt')
75
+ personalization.ids.forEach((id) => {
76
+ this._validateNonEmptyString(ErrorMessages.IV_0031, id);
77
+ });
78
+ }
79
+ /**
80
+ *
81
+ * @returns The personalization property in its DTO format.
82
+ */
83
+ _personalizationToDTO() {
84
+ if (!this._personalization)
85
+ return undefined;
86
+ const { attributes, ...rest } = this._personalization;
87
+ return { fields: attributes, ...rest };
88
+ }
89
+ /**
90
+ * @param ranking - the object of the `ranking` param
91
+ */
92
+ set ranking(ranking) {
93
+ this._validateRanking(ranking);
94
+ this._ranking = ranking;
95
+ }
96
+ /**
97
+ * @returns the `ranking` property of the SearchWidgetItem
98
+ */
99
+ get ranking() {
100
+ return this._ranking;
101
+ }
102
+ /**
103
+ * sets the `ranking` property to undefined of the SearchWidgetItem
104
+ */
105
+ resetRanking() {
106
+ this._ranking = undefined;
107
+ }
108
+ /**
109
+ *
110
+ * @param ranking - the object of the `ranking` property
111
+ * @throws IV_0016 if `ranking.name` contains an empty string
112
+ * @throws IV_0016 if `ranking.weight` is outside of range 1 ~ 100
113
+ */
114
+ _validateRanking(ranking) {
115
+ ranking?.forEach((rank) => {
116
+ this._validateNumberInRange(ErrorMessages.IV_0029, { max: 100, min: 0.1 }, rank.weight);
117
+ this._validateNonEmptyNoWhitespaceString(ErrorMessages.IV_0016, rank.name);
118
+ });
119
+ }
120
+ /**
121
+ * Sets the search query for the SearchWidgetItem.
122
+ * This method updates the `query` property of the search configuration within the SearchWidgetItem instance.
123
+ * The query is used to define specific search criteria.
124
+ * @param query - The operator that specifies the search criteria.
125
+ */
126
+ set query(query) {
127
+ this._validateQuery(query);
128
+ this._query = query;
129
+ }
130
+ /**
131
+ * @returns The query property of the SearchWidgetItem.
132
+ */
133
+ get query() {
134
+ return this._query;
135
+ }
136
+ _validateQuery(query) {
137
+ this._validateStringLengthInRange1To100(ErrorMessages.IV_0009, query.keyphrase);
138
+ }
139
+ /**
140
+ * Sets the query data to undefined
141
+ */
142
+ resetQuery() {
143
+ this._query = undefined;
144
+ }
145
+ /**
146
+ * Sets the search facet for the SearchWidgetItem.
147
+ * This method updates the `facet` property of the search configuration within the SearchWidgetItem instance.
148
+ *
149
+ * @param facet - The object to set as the search facet.
150
+ * @throws Error If the max is less than 1 or greater than 100, indicating an invalid range.
151
+ */
152
+ set facet(facet) {
153
+ this._validateNumberInRange1To100(ErrorMessages.IV_0014, facet.max);
154
+ this._validateFacetTypes(facet.types);
155
+ this._facet = facet;
156
+ }
157
+ /**
158
+ * @returns The facet property of the SearchWidgetItem.
159
+ */
160
+ get facet() {
161
+ return this._facet;
162
+ }
163
+ /**
164
+ * Sets the facet data to undefined
165
+ */
166
+ resetFacet() {
167
+ this._facet = undefined;
168
+ }
169
+ /**
170
+ * Sets the search offset for the WidgetItem.
171
+ * Updates the offset property to manage pagination. Throws an error if the offset value is less than 0.
172
+ * @param offset - The non-negative integer to set as the search offset.
173
+ * @throws Error If the offset is less than 0.
174
+ */
175
+ set offset(offset) {
176
+ this._validatePositiveInteger(ErrorMessages.IV_0008, offset);
177
+ this._offset = offset;
178
+ }
179
+ /**
180
+ * @returns The offset property of the SearchWidgetItem.
181
+ */
182
+ get offset() {
183
+ return this._offset;
184
+ }
185
+ /**
186
+ * Sets the offset value to undefined
187
+ */
188
+ resetOffset() {
189
+ this._offset = undefined;
190
+ }
191
+ /**
192
+ * Sets the suggestion property for SearchWidgetItem
193
+ * @param suggestion - the <array>array of objects for the suggestion param
194
+ * @throws error if <SearchSuggestionOptions>.<suggestion>.name property is an empty string or contains spaces
195
+ * @throws error if <SearchSuggestionOptions>.<suggestion>.max property is not between the range 1 ~ 100
196
+ */
197
+ set suggestion(suggestion) {
198
+ this._validateSuggestion(suggestion);
199
+ this._suggestion = suggestion;
200
+ }
201
+ /**
202
+ * @returns The suggestion property of the SearchWidgetItem.
203
+ */
204
+ get suggestion() {
205
+ return this._suggestion;
206
+ }
207
+ /**
208
+ * Sets the suggestion property to undefined.
209
+ */
210
+ resetSuggestion() {
211
+ this._suggestion = undefined;
212
+ }
213
+ _suggestionToDTO() {
214
+ if (!this._suggestion)
215
+ return undefined;
216
+ return this._suggestion.map((item) => {
217
+ const { keyphraseFallback, ...rest } = item;
218
+ return { ...rest, keyphrase_fallback: keyphraseFallback };
219
+ });
220
+ }
221
+ /**
222
+ * Validates the suggestion property. Throws error if provided with incorrect values.
223
+ * @param suggestion - the <array> of objects for the suggestion param
224
+ */
225
+ _validateSuggestion(suggestion) {
226
+ suggestion?.forEach((suggestionItem) => {
227
+ this._validateNumberInRange1To100(ErrorMessages.IV_0014, suggestionItem.max);
228
+ this._validateNonEmptyNoWhitespaceString(ErrorMessages.IV_0016, suggestionItem.name);
229
+ });
230
+ }
231
+ /**
232
+ * Sets the search sort property for SearchWidgetItem
233
+ * Throws an error if one of the values under sort have an empty `name`
234
+ * @param sort - the object for the sort param
235
+ * @throws error if <SearchSortOptions>.<SortValue>.name(s) property is an empty string
236
+ */
237
+ set sort(sort) {
238
+ this._validateSort(sort);
239
+ this._sort = sort;
240
+ }
241
+ /**
242
+ * @returns The sort property of the SearchWidgetItem.
243
+ */
244
+ get sort() {
245
+ return this._sort;
246
+ }
247
+ /**
248
+ * Sets the sort data to undefined
249
+ */
250
+ resetSort() {
251
+ this._sort = undefined;
252
+ }
253
+ /**
254
+ * Validates the sort field. Throws an error if incorrect values are provided.
255
+ */
256
+ _validateSort(sort) {
257
+ sort?.value?.forEach((sortValueItem) => {
258
+ this._validateNonEmptyString(ErrorMessages.IV_0026, sortValueItem.name);
259
+ });
260
+ }
261
+ /**
262
+ * Validates the facet type fields. Throws an errors if incorrect values are provided.
263
+ */
264
+ _validateFacetTypes(types) {
265
+ if (!types)
266
+ return;
267
+ types.forEach((type) => {
268
+ if (!type.name || type.name.includes(' '))
269
+ throw new Error(ErrorMessages.IV_0016);
270
+ this._validateStringLengthInRange1To100(ErrorMessages.IV_0018, type.keyphrase);
271
+ this._validateNumberInRange1To100(ErrorMessages.IV_0017, type.max);
272
+ this._validateNumberInRange1To100(ErrorMessages.IV_0019, type.minCount);
273
+ if (typeof type.sort === 'object' && typeof type.sort.after === 'string') {
274
+ this._validateNonEmptyNoWhitespaceString(ErrorMessages.IV_0020, type.sort.after);
275
+ if (type.sort.name !== 'text')
276
+ throw new Error(ErrorMessages.IV_0021);
277
+ }
278
+ });
279
+ }
280
+ _filterToDTO(type) {
281
+ if (!type.filter)
282
+ return undefined;
283
+ if (!isFacetFilter(type.filter.values))
284
+ return type.filter;
285
+ return { type: type.filter.type, values: type.filter.values.map((filter) => filter.toDTO()) };
286
+ }
287
+ /**
288
+ * Builds the sort piece of the DTO.
289
+ */
290
+ _facetSortToDTO(type) {
291
+ if (type.sort)
292
+ return {
293
+ after: type.sort.after,
294
+ sort: { name: type.sort.name, order: type.sort.order }
295
+ };
296
+ return {};
297
+ }
298
+ /**
299
+ * Builds the filtering options array.
300
+ */
301
+ _filteringOptionsToDTO(filteringOptions) {
302
+ if (!filteringOptions)
303
+ return undefined;
304
+ if (filteringOptions === 'Dynamic AND')
305
+ return ['hard_filters', 'other_facet_values', 'own_values'];
306
+ if (filteringOptions === 'Dynamic OR')
307
+ return ['hard_filters', 'other_facet_values'];
308
+ return ['hard_filters'];
309
+ }
310
+ /**
311
+ * Maps the search widget item to its DTO format.
312
+ */
313
+ toDTO() {
314
+ const baseDTO = super.toDTO();
315
+ const resultsDTO = this._resultsToDTO();
316
+ const facet = {
317
+ all: this._facet?.all,
318
+ coverage: this._facet?.coverage,
319
+ max: this._facet?.max,
320
+ sort: this._facet?.sort
321
+ };
322
+ if (this._facet?.types)
323
+ facet.types = this._facet.types.map((type) => ({
324
+ exclude: type.exclude,
325
+ filter: this._filterToDTO(type),
326
+ filtering_options: this._filteringOptionsToDTO(type.filteringOptions),
327
+ keyphrase: type.keyphrase,
328
+ max: type.max,
329
+ min_count: type.minCount,
330
+ name: type.name,
331
+ ...this._facetSortToDTO(type)
332
+ }));
333
+ const search = {
334
+ ...{ offset: this._offset },
335
+ ...(this._query && { query: this._query }),
336
+ ...(Object.values(facet).filter((value) => value !== undefined).length && { facet }),
337
+ ...{ personalization: this._personalizationToDTO() },
338
+ ...{ ranking: this._ranking },
339
+ ...{ suggestion: this._suggestionToDTO() },
340
+ ...{ sort: this._sort },
341
+ ...resultsDTO
342
+ };
343
+ const dto = {
344
+ ...baseDTO,
345
+ search: Object.values(search).filter((value) => value !== undefined).length ? search : undefined
346
+ };
347
+ return dto;
348
+ }
349
+ }
@@ -0,0 +1,8 @@
1
+ import type { ArrayOfAtLeastOne } from '../filters/interfaces';
2
+ import type { FacetFilter } from './interfaces';
3
+ /**
4
+ * Checks if the provided filters are facet filters.
5
+ * @param filters - The filters to check.
6
+ * @returns True if the filters are facet filters, false otherwise.
7
+ */
8
+ export declare function isFacetFilter(filters: ArrayOfAtLeastOne<string> | ArrayOfAtLeastOne<FacetFilter>): filters is ArrayOfAtLeastOne<FacetFilter>;
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Checks if the provided filters are facet filters.
3
+ * @param filters - The filters to check.
4
+ * @returns True if the filters are facet filters, false otherwise.
5
+ */
6
+ export function isFacetFilter(filters) {
7
+ if (typeof filters[0] === 'string')
8
+ return false;
9
+ return true;
10
+ }
@@ -0,0 +1,64 @@
1
+ import { ErrorMessages } from '../../consts';
2
+ import type { WidgetItemDTO } from './interfaces';
3
+ export declare class WidgetItem {
4
+ protected _entity: string;
5
+ protected _widgetId: string;
6
+ /**
7
+ * Creates and holds the functionality of a widget item.
8
+ * @param entity - The widget's item entity.
9
+ * @param widgetId - The widget's item id.
10
+ *
11
+ */
12
+ constructor(entity: string, widgetId: string);
13
+ /**
14
+ * Sets the entity for the WidgetItem.
15
+ * This method updates the `entity` property of WidgetItem instance.
16
+ *
17
+ * @param entity - The entity to set.
18
+ */
19
+ set entity(entity: string);
20
+ /**
21
+ * @returns The entity property of the WidgetItem.
22
+ */
23
+ get entity(): string;
24
+ private _validateEntity;
25
+ /**
26
+ * Sets the id for the WidgetItem.
27
+ * This method updates the `widgetId` property of WidgetItem instance.
28
+ *
29
+ * @param widgetId - The entity to set.
30
+ */
31
+ set widgetId(widgetId: string);
32
+ /**
33
+ * @returns The id property of the WidgetItem.
34
+ */
35
+ get widgetId(): string;
36
+ private _validateWidgetId;
37
+ protected _validateNumberInRange1To100(errorMessage: ErrorMessages, num?: number): void;
38
+ /**
39
+ *
40
+ * @param errorMessage - The error message
41
+ * @param range - min and max range
42
+ * @param num - number to test
43
+ * @returns void
44
+ */
45
+ protected _validateNumberInRange(errorMessage: ErrorMessages, range: {
46
+ min: number;
47
+ max: number;
48
+ }, num?: number): void;
49
+ protected _validateStringLengthInRange1To100(errorMessage: ErrorMessages, str?: string): void;
50
+ protected _validatePositiveInteger(error: ErrorMessages, num?: number): void;
51
+ protected _validateNonEmptyString(errorMessage: ErrorMessages, str?: string): void;
52
+ /**
53
+ * Tests if passed string is defined, is not empty string and does not contain whitespaces.
54
+ * @param errorMessage - Error Message
55
+ * @param string - the string to test
56
+ * @returns void
57
+ * @throws Error when failed
58
+ */
59
+ protected _validateNonEmptyNoWhitespaceString(errorMessage: ErrorMessages, string?: string): void;
60
+ /**
61
+ * Maps the widget item to its DTO format.
62
+ */
63
+ toDTO(): WidgetItemDTO;
64
+ }
@@ -0,0 +1,110 @@
1
+ // © Sitecore Corporation A/S. All rights reserved. Sitecore® is a registered trademark of Sitecore Corporation A/S.
2
+ import { ErrorMessages } from '../../consts';
3
+ export class WidgetItem {
4
+ /**
5
+ * Creates and holds the functionality of a widget item.
6
+ * @param entity - The widget's item entity.
7
+ * @param widgetId - The widget's item id.
8
+ *
9
+ */
10
+ constructor(entity, widgetId) {
11
+ this._validateWidgetId(widgetId);
12
+ this._validateEntity(entity);
13
+ this._entity = entity;
14
+ this._widgetId = widgetId;
15
+ }
16
+ /**
17
+ * Sets the entity for the WidgetItem.
18
+ * This method updates the `entity` property of WidgetItem instance.
19
+ *
20
+ * @param entity - The entity to set.
21
+ */
22
+ set entity(entity) {
23
+ this._validateEntity(entity);
24
+ this._entity = entity;
25
+ }
26
+ /**
27
+ * @returns The entity property of the WidgetItem.
28
+ */
29
+ get entity() {
30
+ return this._entity;
31
+ }
32
+ _validateEntity(entity) {
33
+ if (!entity || entity.trim().length === 0)
34
+ throw new Error(ErrorMessages.MV_0010);
35
+ }
36
+ /**
37
+ * Sets the id for the WidgetItem.
38
+ * This method updates the `widgetId` property of WidgetItem instance.
39
+ *
40
+ * @param widgetId - The entity to set.
41
+ */
42
+ set widgetId(widgetId) {
43
+ this._validateWidgetId(widgetId);
44
+ this._widgetId = widgetId;
45
+ }
46
+ /**
47
+ * @returns The id property of the WidgetItem.
48
+ */
49
+ get widgetId() {
50
+ return this._widgetId;
51
+ }
52
+ _validateWidgetId(widgetId) {
53
+ if (!widgetId || widgetId.trim().length === 0)
54
+ throw new Error(ErrorMessages.MV_0011);
55
+ }
56
+ _validateNumberInRange1To100(errorMessage, num) {
57
+ if (num === undefined || (num >= 1 && num <= 100))
58
+ return;
59
+ throw new Error(errorMessage);
60
+ }
61
+ /**
62
+ *
63
+ * @param errorMessage - The error message
64
+ * @param range - min and max range
65
+ * @param num - number to test
66
+ * @returns void
67
+ */
68
+ _validateNumberInRange(errorMessage, range, num) {
69
+ if (num === undefined || (num >= range.min && num <= range.max))
70
+ return;
71
+ throw new Error(errorMessage);
72
+ }
73
+ _validateStringLengthInRange1To100(errorMessage, str) {
74
+ if (str === undefined || (str.trim().length >= 1 && str.length <= 100))
75
+ return;
76
+ throw new Error(errorMessage);
77
+ }
78
+ _validatePositiveInteger(error, num) {
79
+ if (num === undefined || num >= 0)
80
+ return;
81
+ throw new Error(error);
82
+ }
83
+ _validateNonEmptyString(errorMessage, str) {
84
+ if (str === undefined || str.trim().length >= 1)
85
+ return;
86
+ throw new Error(errorMessage);
87
+ }
88
+ /**
89
+ * Tests if passed string is defined, is not empty string and does not contain whitespaces.
90
+ * @param errorMessage - Error Message
91
+ * @param string - the string to test
92
+ * @returns void
93
+ * @throws Error when failed
94
+ */
95
+ _validateNonEmptyNoWhitespaceString(errorMessage, string) {
96
+ if (string && !string.includes(' '))
97
+ return;
98
+ throw new Error(errorMessage);
99
+ }
100
+ /**
101
+ * Maps the widget item to its DTO format.
102
+ */
103
+ toDTO() {
104
+ return {
105
+ entity: this._entity,
106
+ // eslint-disable-next-line @typescript-eslint/naming-convention
107
+ rfk_id: this._widgetId
108
+ };
109
+ }
110
+ }
@@ -0,0 +1,15 @@
1
+ import type { WidgetDTO } from './interfaces';
2
+ import type { WidgetItem } from './widget-item';
3
+ export declare class WidgetRequestData {
4
+ private _widgetItems;
5
+ /**
6
+ * Creates and holds the functionality of the widget request data.
7
+ * @param widgetItems - Array of {@link WidgetItem} instances.
8
+ */
9
+ constructor(widgetItems: WidgetItem[]);
10
+ private _validateWidgetItems;
11
+ /**
12
+ * Maps the widget items to their DTO format.
13
+ */
14
+ toDTO(): WidgetDTO;
15
+ }
@@ -0,0 +1,26 @@
1
+ // © Sitecore Corporation A/S. All rights reserved. Sitecore® is a registered trademark of Sitecore Corporation A/S.
2
+ import { ErrorMessages } from '../../consts';
3
+ export class WidgetRequestData {
4
+ /**
5
+ * Creates and holds the functionality of the widget request data.
6
+ * @param widgetItems - Array of {@link WidgetItem} instances.
7
+ */
8
+ constructor(widgetItems) {
9
+ this._validateWidgetItems(widgetItems);
10
+ this._widgetItems = widgetItems;
11
+ }
12
+ _validateWidgetItems(widgetItems) {
13
+ if (widgetItems.length === 0)
14
+ throw new Error(ErrorMessages.MV_0012);
15
+ }
16
+ /**
17
+ * Maps the widget items to their DTO format.
18
+ */
19
+ toDTO() {
20
+ return {
21
+ widget: {
22
+ items: this._widgetItems.map((widgetItem) => widgetItem.toDTO())
23
+ }
24
+ };
25
+ }
26
+ }
@@ -0,0 +1,6 @@
1
+ import type { EntityViewEventParams } from '../../events/interfaces';
2
+ /**
3
+ * This function sends an entity view event from browser.
4
+ * @param entityViewEventParams - An object containing conversion event params from {@link EntityViewEventParams}
5
+ */
6
+ export declare function entityView(entityViewEventParams: EntityViewEventParams): Promise<import("@sitecore-cloudsdk/core/internal").EPResponse | null>;
@@ -0,0 +1,13 @@
1
+ // © Sitecore Corporation A/S. All rights reserved. Sitecore® is a registered trademark of Sitecore Corporation A/S.
2
+ import { event } from '@sitecore-cloudsdk/events/browser';
3
+ import { EntityViewEvent } from '../../events/entity-view-event';
4
+ import { awaitInit } from '../../initializer/browser/initializer';
5
+ /**
6
+ * This function sends an entity view event from browser.
7
+ * @param entityViewEventParams - An object containing conversion event params from {@link EntityViewEventParams}
8
+ */
9
+ export async function entityView(entityViewEventParams) {
10
+ await awaitInit();
11
+ const conversionEventDTO = new EntityViewEvent(entityViewEventParams).toDTO();
12
+ return await event(conversionEventDTO);
13
+ }
@@ -0,0 +1,15 @@
1
+ import { Context } from '../../request-entities/context/context';
2
+ import type { Pathname } from '../../types';
3
+ import type { SearchEndpointResponse } from '../post-request';
4
+ /**
5
+ * This function requests widget data for a page.
6
+ * @param pathname - The path of the URL.
7
+ * @returns The response object.
8
+ */
9
+ export declare function getPageWidgetData(pathname: Pathname): Promise<SearchEndpointResponse | null>;
10
+ /**
11
+ * This function requests widget data for a page.
12
+ * @param context - The context.
13
+ * @returns The response object.
14
+ */
15
+ export declare function getPageWidgetData(context: Context): Promise<SearchEndpointResponse | null>;
@@ -0,0 +1,21 @@
1
+ // © Sitecore Corporation A/S. All rights reserved. Sitecore® is a registered trademark of Sitecore Corporation A/S.
2
+ import { getCloudSDKSettingsBrowser as getCloudSDKSettings } from '@sitecore-cloudsdk/core/internal';
3
+ import { ErrorMessages } from '../../consts';
4
+ import { awaitInit } from '../../initializer/browser/initializer';
5
+ import { Context } from '../../request-entities/context/context';
6
+ import { sendPostRequest } from '../post-request';
7
+ export async function getPageWidgetData(param) {
8
+ await awaitInit();
9
+ const settings = getCloudSDKSettings();
10
+ let context;
11
+ if (param instanceof Context) {
12
+ if (!param.page)
13
+ throw new Error(ErrorMessages.MV_0006);
14
+ context = param;
15
+ }
16
+ else
17
+ context = new Context({ page: { uri: param } });
18
+ const contextRequestBody = context.toDTO();
19
+ const body = JSON.stringify({ ...contextRequestBody });
20
+ return await sendPostRequest(body, settings);
21
+ }
@@ -0,0 +1,9 @@
1
+ import type { Context } from '../../request-entities/context/context';
2
+ import type { WidgetRequestData } from '../../request-entities/widgets/widget-request-data';
3
+ import type { SearchEndpointResponse } from '../post-request';
4
+ /**
5
+ * This function requests widget data.
6
+ * @param widgetRequestData - An instance of {@link WidgetRequestData}.
7
+ * @returns The response object.
8
+ */
9
+ export declare function getWidgetData(widgetRequestData: WidgetRequestData, contextRequestData?: Context): Promise<SearchEndpointResponse | null>;
@@ -0,0 +1,18 @@
1
+ // © Sitecore Corporation A/S. All rights reserved. Sitecore® is a registered trademark of Sitecore Corporation A/S.
2
+ import { getCloudSDKSettingsBrowser as getCloudSDKSettings // getEnabledPackageBrowser as getEnabledPackage
3
+ } from '@sitecore-cloudsdk/core/internal';
4
+ import { awaitInit } from '../../initializer/browser/initializer';
5
+ import { sendPostRequest } from '../post-request';
6
+ /**
7
+ * This function requests widget data.
8
+ * @param widgetRequestData - An instance of {@link WidgetRequestData}.
9
+ * @returns The response object.
10
+ */
11
+ export async function getWidgetData(widgetRequestData, contextRequestData) {
12
+ await awaitInit();
13
+ const settings = getCloudSDKSettings();
14
+ const widgetRequestBody = widgetRequestData.toDTO();
15
+ const contextRequestBody = contextRequestData?.toDTO();
16
+ const body = JSON.stringify({ ...contextRequestBody, ...widgetRequestBody });
17
+ return await sendPostRequest(body, settings);
18
+ }
@@ -0,0 +1,7 @@
1
+ import type { WidgetFacetClickEventParams } from '../../events/interfaces';
2
+ /**
3
+ * This function sends a widget facet click event from browser.
4
+ * @param widgetFacetClickEventParams - An object containing widget facet click event params
5
+ * from {@link WidgetFacetClickEventParams}
6
+ */
7
+ export declare function widgetFacetClick(widgetFacetClickEventParams: WidgetFacetClickEventParams): Promise<import("@sitecore-cloudsdk/core/internal").EPResponse | null>;