@sitecore-content-sdk/core 1.3.0-canary.9 → 1.4.0-canary.2

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 (342) hide show
  1. package/README.md +7 -7
  2. package/dist/cjs/cache-client.js +55 -54
  3. package/dist/cjs/client/constants.js +7 -7
  4. package/dist/cjs/client/edge-proxy.js +24 -22
  5. package/dist/cjs/client/index.js +15 -15
  6. package/dist/cjs/client/models.js +2 -2
  7. package/dist/cjs/client/sitecore-client.js +421 -419
  8. package/dist/cjs/client/utils.js +47 -46
  9. package/dist/cjs/config/define-config.js +194 -193
  10. package/dist/cjs/config/index.js +7 -7
  11. package/dist/cjs/config/models.js +12 -11
  12. package/dist/cjs/config-cli/define-cli-config.js +23 -22
  13. package/dist/cjs/config-cli/index.js +7 -7
  14. package/dist/cjs/config-cli/models.js +8 -7
  15. package/dist/cjs/constants.js +49 -17
  16. package/dist/cjs/debug.js +48 -46
  17. package/dist/cjs/editing/codegen/index.js +14 -9
  18. package/dist/cjs/editing/codegen/preview.js +277 -193
  19. package/dist/cjs/editing/component-layout-service.js +62 -61
  20. package/dist/cjs/editing/design-library.js +183 -126
  21. package/dist/cjs/editing/editing-service.js +75 -74
  22. package/dist/cjs/editing/index.js +33 -27
  23. package/dist/cjs/editing/metadata.js +42 -42
  24. package/dist/cjs/editing/models.js +44 -38
  25. package/dist/cjs/editing/utils.js +108 -90
  26. package/dist/cjs/form/form.js +81 -78
  27. package/dist/cjs/form/index.js +7 -7
  28. package/dist/cjs/graphql-request-client.js +108 -107
  29. package/dist/cjs/i18n/dictionary-service.js +122 -121
  30. package/dist/cjs/i18n/index.js +7 -7
  31. package/dist/cjs/i18n/utils.js +16 -15
  32. package/dist/cjs/index.js +60 -60
  33. package/dist/cjs/layout/content-styles.js +72 -71
  34. package/dist/cjs/layout/index.js +24 -24
  35. package/dist/cjs/layout/layout-service.js +62 -57
  36. package/dist/cjs/layout/models.js +39 -34
  37. package/dist/cjs/layout/themes.js +76 -75
  38. package/dist/cjs/layout/utils.js +117 -110
  39. package/dist/cjs/media/index.js +38 -38
  40. package/dist/cjs/media/media-api.js +100 -96
  41. package/dist/cjs/models.js +2 -2
  42. package/dist/cjs/native-fetcher.js +194 -179
  43. package/dist/cjs/personalize/index.js +15 -15
  44. package/dist/cjs/personalize/layout-personalizer.js +98 -97
  45. package/dist/cjs/personalize/personalize-service.js +98 -94
  46. package/dist/cjs/personalize/utils.js +143 -136
  47. package/dist/cjs/retries.js +43 -42
  48. package/dist/cjs/site/error-pages-service.js +65 -64
  49. package/dist/cjs/site/index.js +26 -26
  50. package/dist/cjs/site/models.js +2 -2
  51. package/dist/cjs/site/redirects-service.js +94 -81
  52. package/dist/cjs/site/robots-service.js +66 -65
  53. package/dist/cjs/site/site-resolver.js +73 -72
  54. package/dist/cjs/site/siteinfo-service.js +84 -80
  55. package/dist/cjs/site/sitemap-xml-service.js +84 -83
  56. package/dist/cjs/site/sitepath-service.js +165 -164
  57. package/dist/cjs/site/utils.js +55 -47
  58. package/dist/cjs/sitecore-service-base.js +36 -36
  59. package/dist/cjs/tools/auth/flow.js +65 -64
  60. package/dist/cjs/tools/auth/index.js +5 -5
  61. package/dist/cjs/tools/auth/models.js +2 -2
  62. package/dist/cjs/tools/auth/tenant-store.js +38 -38
  63. package/dist/cjs/tools/codegen/component-generation.js +52 -50
  64. package/dist/cjs/tools/codegen/extract-files.js +105 -107
  65. package/dist/cjs/tools/codegen/import-map.js +401 -349
  66. package/dist/cjs/tools/codegen/utils.js +418 -418
  67. package/dist/cjs/tools/generate-map.js +2 -2
  68. package/dist/cjs/tools/generateMetadata.js +36 -35
  69. package/dist/cjs/tools/generateSites.js +59 -58
  70. package/dist/cjs/tools/index.js +75 -73
  71. package/dist/cjs/tools/scaffold.js +60 -59
  72. package/dist/cjs/tools/templating/components.js +96 -266
  73. package/dist/cjs/tools/templating/index.js +11 -14
  74. package/dist/cjs/tools/templating/plugins.js +80 -78
  75. package/dist/cjs/tools/templating/utils.js +67 -66
  76. package/dist/cjs/utils/ensurePath.js +20 -20
  77. package/dist/cjs/utils/env.js +28 -27
  78. package/dist/cjs/utils/globalCache.js +55 -0
  79. package/dist/cjs/utils/index.js +26 -21
  80. package/dist/cjs/utils/is-server.js +11 -10
  81. package/dist/cjs/utils/normalize-url.js +5 -5
  82. package/dist/cjs/utils/timeout-promise.js +31 -31
  83. package/dist/cjs/utils/utils.js +254 -229
  84. package/dist/esm/cache-client.js +51 -50
  85. package/dist/esm/client/constants.js +4 -4
  86. package/dist/esm/client/edge-proxy.js +19 -17
  87. package/dist/esm/client/index.js +5 -5
  88. package/dist/esm/client/models.js +1 -1
  89. package/dist/esm/client/sitecore-client.js +414 -412
  90. package/dist/esm/client/utils.js +43 -42
  91. package/dist/esm/config/define-config.js +188 -187
  92. package/dist/esm/config/index.js +2 -2
  93. package/dist/esm/config/models.js +9 -8
  94. package/dist/esm/config-cli/define-cli-config.js +19 -18
  95. package/dist/esm/config-cli/index.js +2 -2
  96. package/dist/esm/config-cli/models.js +5 -4
  97. package/dist/esm/constants.js +46 -14
  98. package/dist/esm/debug.js +41 -39
  99. package/dist/esm/editing/codegen/index.js +1 -1
  100. package/dist/esm/editing/codegen/preview.js +263 -185
  101. package/dist/esm/editing/component-layout-service.js +55 -54
  102. package/dist/esm/editing/design-library.js +171 -117
  103. package/dist/esm/editing/editing-service.js +68 -67
  104. package/dist/esm/editing/index.js +6 -5
  105. package/dist/esm/editing/metadata.js +39 -39
  106. package/dist/esm/editing/models.js +41 -35
  107. package/dist/esm/editing/utils.js +98 -80
  108. package/dist/esm/form/form.js +72 -69
  109. package/dist/esm/form/index.js +1 -1
  110. package/dist/esm/graphql-request-client.js +101 -100
  111. package/dist/esm/i18n/dictionary-service.js +115 -114
  112. package/dist/esm/i18n/index.js +2 -2
  113. package/dist/esm/i18n/utils.js +13 -12
  114. package/dist/esm/index.js +13 -13
  115. package/dist/esm/layout/content-styles.js +64 -63
  116. package/dist/esm/layout/index.js +6 -6
  117. package/dist/esm/layout/layout-service.js +55 -50
  118. package/dist/esm/layout/models.js +36 -31
  119. package/dist/esm/layout/themes.js +71 -70
  120. package/dist/esm/layout/utils.js +109 -102
  121. package/dist/esm/media/index.js +2 -2
  122. package/dist/esm/media/media-api.js +90 -86
  123. package/dist/esm/models.js +1 -1
  124. package/dist/esm/native-fetcher.js +187 -172
  125. package/dist/esm/personalize/index.js +3 -3
  126. package/dist/esm/personalize/layout-personalizer.js +93 -92
  127. package/dist/esm/personalize/personalize-service.js +91 -87
  128. package/dist/esm/personalize/utils.js +135 -128
  129. package/dist/esm/retries.js +39 -38
  130. package/dist/esm/site/error-pages-service.js +58 -57
  131. package/dist/esm/site/index.js +8 -8
  132. package/dist/esm/site/models.js +1 -1
  133. package/dist/esm/site/redirects-service.js +87 -74
  134. package/dist/esm/site/robots-service.js +59 -58
  135. package/dist/esm/site/site-resolver.js +69 -68
  136. package/dist/esm/site/siteinfo-service.js +77 -73
  137. package/dist/esm/site/sitemap-xml-service.js +77 -76
  138. package/dist/esm/site/sitepath-service.js +157 -156
  139. package/dist/esm/site/utils.js +49 -41
  140. package/dist/esm/sitecore-service-base.js +29 -29
  141. package/dist/esm/tools/auth/flow.js +62 -61
  142. package/dist/esm/tools/auth/index.js +1 -1
  143. package/dist/esm/tools/auth/models.js +1 -1
  144. package/dist/esm/tools/auth/tenant-store.js +35 -35
  145. package/dist/esm/tools/codegen/component-generation.js +44 -42
  146. package/dist/esm/tools/codegen/extract-files.js +99 -101
  147. package/dist/esm/tools/codegen/import-map.js +358 -306
  148. package/dist/esm/tools/codegen/utils.js +373 -373
  149. package/dist/esm/tools/generate-map.js +1 -1
  150. package/dist/esm/tools/generateMetadata.js +29 -28
  151. package/dist/esm/tools/generateSites.js +52 -51
  152. package/dist/esm/tools/index.js +28 -27
  153. package/dist/esm/tools/scaffold.js +52 -51
  154. package/dist/esm/tools/templating/components.js +59 -223
  155. package/dist/esm/tools/templating/index.js +3 -3
  156. package/dist/esm/tools/templating/plugins.js +72 -70
  157. package/dist/esm/tools/templating/utils.js +59 -58
  158. package/dist/esm/utils/ensurePath.js +13 -13
  159. package/dist/esm/utils/env.js +24 -23
  160. package/dist/esm/utils/globalCache.js +49 -0
  161. package/dist/esm/utils/index.js +4 -3
  162. package/dist/esm/utils/is-server.js +9 -8
  163. package/dist/esm/utils/normalize-url.js +1 -1
  164. package/dist/esm/utils/timeout-promise.js +28 -28
  165. package/dist/esm/utils/utils.js +238 -213
  166. package/package.json +73 -5
  167. package/types/cache-client.d.ts +68 -64
  168. package/types/cache-client.d.ts.map +1 -0
  169. package/types/client/constants.d.ts +5 -4
  170. package/types/client/constants.d.ts.map +1 -0
  171. package/types/client/edge-proxy.d.ts +18 -15
  172. package/types/client/edge-proxy.d.ts.map +1 -0
  173. package/types/client/index.d.ts +8 -7
  174. package/types/client/index.d.ts.map +1 -0
  175. package/types/client/models.d.ts +21 -19
  176. package/types/client/models.d.ts.map +1 -0
  177. package/types/client/sitecore-client.d.ts +338 -327
  178. package/types/client/sitecore-client.d.ts.map +1 -0
  179. package/types/client/utils.d.ts +15 -9
  180. package/types/client/utils.d.ts.map +1 -0
  181. package/types/config/define-config.d.ts +20 -18
  182. package/types/config/define-config.d.ts.map +1 -0
  183. package/types/config/index.d.ts +3 -2
  184. package/types/config/index.d.ts.map +1 -0
  185. package/types/config/models.d.ts +287 -268
  186. package/types/config/models.d.ts.map +1 -0
  187. package/types/config-cli/define-cli-config.d.ts +9 -7
  188. package/types/config-cli/define-cli-config.d.ts.map +1 -0
  189. package/types/config-cli/index.d.ts +3 -2
  190. package/types/config-cli/index.d.ts.map +1 -0
  191. package/types/config-cli/models.d.ts +6 -4
  192. package/types/config-cli/models.d.ts.map +1 -0
  193. package/types/constants.d.ts +44 -11
  194. package/types/constants.d.ts.map +1 -0
  195. package/types/debug.d.ts +35 -28
  196. package/types/debug.d.ts.map +1 -0
  197. package/types/editing/codegen/index.d.ts +2 -1
  198. package/types/editing/codegen/index.d.ts.map +1 -0
  199. package/types/editing/codegen/preview.d.ts +256 -195
  200. package/types/editing/codegen/preview.d.ts.map +1 -0
  201. package/types/editing/component-layout-service.d.ts +84 -80
  202. package/types/editing/component-layout-service.d.ts.map +1 -0
  203. package/types/editing/design-library.d.ts +111 -63
  204. package/types/editing/design-library.d.ts.map +1 -0
  205. package/types/editing/editing-service.d.ts +72 -62
  206. package/types/editing/editing-service.d.ts.map +1 -0
  207. package/types/editing/index.d.ts +7 -6
  208. package/types/editing/index.d.ts.map +1 -0
  209. package/types/editing/metadata.d.ts +8 -7
  210. package/types/editing/metadata.d.ts.map +1 -0
  211. package/types/editing/models.d.ts +103 -92
  212. package/types/editing/models.d.ts.map +1 -0
  213. package/types/editing/utils.d.ts +91 -74
  214. package/types/editing/utils.d.ts.map +1 -0
  215. package/types/form/form.d.ts +25 -21
  216. package/types/form/form.d.ts.map +1 -0
  217. package/types/form/index.d.ts +2 -1
  218. package/types/form/index.d.ts.map +1 -0
  219. package/types/graphql-request-client.d.ts +112 -105
  220. package/types/graphql-request-client.d.ts.map +1 -0
  221. package/types/i18n/dictionary-service.d.ts +135 -131
  222. package/types/i18n/dictionary-service.d.ts.map +1 -0
  223. package/types/i18n/index.d.ts +3 -2
  224. package/types/i18n/index.d.ts.map +1 -0
  225. package/types/i18n/utils.d.ts +9 -7
  226. package/types/i18n/utils.d.ts.map +1 -0
  227. package/types/index.d.ts +13 -12
  228. package/types/index.d.ts.map +1 -0
  229. package/types/layout/content-styles.d.ts +20 -18
  230. package/types/layout/content-styles.d.ts.map +1 -0
  231. package/types/layout/index.d.ts +6 -5
  232. package/types/layout/index.d.ts.map +1 -0
  233. package/types/layout/layout-service.d.ts +45 -35
  234. package/types/layout/layout-service.d.ts.map +1 -0
  235. package/types/layout/models.d.ts +174 -151
  236. package/types/layout/models.d.ts.map +1 -0
  237. package/types/layout/themes.d.ts +13 -11
  238. package/types/layout/themes.d.ts.map +1 -0
  239. package/types/layout/utils.d.ts +56 -41
  240. package/types/layout/utils.d.ts.map +1 -0
  241. package/types/media/index.d.ts +3 -2
  242. package/types/media/index.d.ts.map +1 -0
  243. package/types/media/media-api.d.ts +60 -55
  244. package/types/media/media-api.d.ts.map +1 -0
  245. package/types/models.d.ts +94 -84
  246. package/types/models.d.ts.map +1 -0
  247. package/types/native-fetcher.d.ts +124 -114
  248. package/types/native-fetcher.d.ts.map +1 -0
  249. package/types/personalize/index.d.ts +4 -3
  250. package/types/personalize/index.d.ts.map +1 -0
  251. package/types/personalize/layout-personalizer.d.ts +29 -27
  252. package/types/personalize/layout-personalizer.d.ts.map +1 -0
  253. package/types/personalize/personalize-service.d.ts +90 -80
  254. package/types/personalize/personalize-service.d.ts.map +1 -0
  255. package/types/personalize/utils.d.ts +78 -69
  256. package/types/personalize/utils.d.ts.map +1 -0
  257. package/types/retries.d.ts +26 -24
  258. package/types/retries.d.ts.map +1 -0
  259. package/types/site/error-pages-service.d.ts +64 -57
  260. package/types/site/error-pages-service.d.ts.map +1 -0
  261. package/types/site/index.d.ts +10 -9
  262. package/types/site/index.d.ts.map +1 -0
  263. package/types/site/models.d.ts +23 -18
  264. package/types/site/models.d.ts.map +1 -0
  265. package/types/site/redirects-service.d.ts +92 -69
  266. package/types/site/redirects-service.d.ts.map +1 -0
  267. package/types/site/robots-service.d.ts +57 -50
  268. package/types/site/robots-service.d.ts.map +1 -0
  269. package/types/site/site-resolver.d.ts +28 -26
  270. package/types/site/site-resolver.d.ts.map +1 -0
  271. package/types/site/siteinfo-service.d.ts +65 -52
  272. package/types/site/siteinfo-service.d.ts.map +1 -0
  273. package/types/site/sitemap-xml-service.d.ts +63 -56
  274. package/types/site/sitemap-xml-service.d.ts.map +1 -0
  275. package/types/site/sitepath-service.d.ts +137 -134
  276. package/types/site/sitepath-service.d.ts.map +1 -0
  277. package/types/site/utils.d.ts +41 -28
  278. package/types/site/utils.d.ts.map +1 -0
  279. package/types/sitecore-service-base.d.ts +31 -30
  280. package/types/sitecore-service-base.d.ts.map +1 -0
  281. package/types/tools/auth/flow.d.ts +29 -27
  282. package/types/tools/auth/flow.d.ts.map +1 -0
  283. package/types/tools/auth/index.d.ts +2 -1
  284. package/types/tools/auth/index.d.ts.map +1 -0
  285. package/types/tools/auth/models.d.ts +35 -33
  286. package/types/tools/auth/models.d.ts.map +1 -0
  287. package/types/tools/auth/tenant-store.d.ts +12 -11
  288. package/types/tools/auth/tenant-store.d.ts.map +1 -0
  289. package/types/tools/codegen/component-generation.d.ts +50 -47
  290. package/types/tools/codegen/component-generation.d.ts.map +1 -0
  291. package/types/tools/codegen/extract-files.d.ts +24 -22
  292. package/types/tools/codegen/extract-files.d.ts.map +1 -0
  293. package/types/tools/codegen/import-map.d.ts +103 -70
  294. package/types/tools/codegen/import-map.d.ts.map +1 -0
  295. package/types/tools/codegen/utils.d.ts +76 -75
  296. package/types/tools/codegen/utils.d.ts.map +1 -0
  297. package/types/tools/generate-map.d.ts +36 -26
  298. package/types/tools/generate-map.d.ts.map +1 -0
  299. package/types/tools/generateMetadata.d.ts +24 -22
  300. package/types/tools/generateMetadata.d.ts.map +1 -0
  301. package/types/tools/generateSites.d.ts +25 -22
  302. package/types/tools/generateSites.d.ts.map +1 -0
  303. package/types/tools/index.d.ts +22 -20
  304. package/types/tools/index.d.ts.map +1 -0
  305. package/types/tools/scaffold.d.ts +27 -25
  306. package/types/tools/scaffold.d.ts.map +1 -0
  307. package/types/tools/templating/components.d.ts +104 -103
  308. package/types/tools/templating/components.d.ts.map +1 -0
  309. package/types/tools/templating/index.d.ts +4 -3
  310. package/types/tools/templating/index.d.ts.map +1 -0
  311. package/types/tools/templating/plugins.d.ts +71 -67
  312. package/types/tools/templating/plugins.d.ts.map +1 -0
  313. package/types/tools/templating/utils.d.ts +42 -40
  314. package/types/tools/templating/utils.d.ts.map +1 -0
  315. package/types/utils/ensurePath.d.ts +7 -6
  316. package/types/utils/ensurePath.d.ts.map +1 -0
  317. package/types/utils/env.d.ts +9 -7
  318. package/types/utils/env.d.ts.map +1 -0
  319. package/types/utils/globalCache.d.ts +37 -0
  320. package/types/utils/globalCache.d.ts.map +1 -0
  321. package/types/utils/index.d.ts +5 -3
  322. package/types/utils/index.d.ts.map +1 -0
  323. package/types/utils/is-server.d.ts +8 -6
  324. package/types/utils/is-server.d.ts.map +1 -0
  325. package/types/utils/normalize-url.d.ts +2 -1
  326. package/types/utils/normalize-url.d.ts.map +1 -0
  327. package/types/utils/timeout-promise.d.ts +18 -17
  328. package/types/utils/timeout-promise.d.ts.map +1 -0
  329. package/types/utils/utils.d.ts +104 -79
  330. package/types/utils/utils.d.ts.map +1 -0
  331. package/client.js +0 -1
  332. package/codegen.js +0 -1
  333. package/config-cli.js +0 -1
  334. package/config.js +0 -1
  335. package/editing.js +0 -1
  336. package/i18n.js +0 -1
  337. package/layout.js +0 -1
  338. package/media.js +0 -1
  339. package/personalize.js +0 -1
  340. package/site.js +0 -1
  341. package/tools.js +0 -1
  342. package/utils.js +0 -1
@@ -1,97 +1,98 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.personalizeLayout = personalizeLayout;
4
- exports.personalizePlaceholder = personalizePlaceholder;
5
- exports.personalizeComponent = personalizeComponent;
6
- const constants_1 = require("../constants");
7
- const transformToHiddenRenderingVariant = (component) => (Object.assign(Object.assign({}, component), { componentName: constants_1.HIDDEN_RENDERING_NAME, experiences: {} }));
8
- /**
9
- * Apply personalization to layout data. This will recursively go through all placeholders/components, check experiences nodes and replace default with object from specific experience.
10
- * @param {LayoutServiceData} layout Layout data
11
- * @param {string} variantId variant id
12
- * @param {string[]} [componentVariantIds] component variant ids
13
- */
14
- function personalizeLayout(layout, variantId, componentVariantIds) {
15
- var _a;
16
- // Add (page-level) variantId to Sitecore context so that it is accessible here
17
- layout.sitecore.context.variantId = variantId;
18
- const placeholders = ((_a = layout.sitecore.route) === null || _a === void 0 ? void 0 : _a.placeholders) || {};
19
- if (Object.keys(placeholders).length === 0) {
20
- return undefined;
21
- }
22
- const isEditing = layout.sitecore.context.pageEditing;
23
- if (placeholders) {
24
- Object.keys(placeholders).forEach((placeholder) => {
25
- placeholders[placeholder] = personalizePlaceholder(placeholders[placeholder], [variantId, ...(componentVariantIds || [])], isEditing);
26
- });
27
- }
28
- return placeholders;
29
- }
30
- /**
31
- * @param {Array} components components within placeholder
32
- * @param {string[]} variantIds variant ids
33
- * @param {boolean} isEditing indicates if page is rendered in metadata edit mode
34
- * @returns {ComponentRendering[]} components with personalization applied
35
- */
36
- function personalizePlaceholder(components, variantIds, isEditing) {
37
- return components
38
- .map((component) => {
39
- const rendering = component;
40
- if (rendering.experiences !== undefined) {
41
- return personalizeComponent(rendering, variantIds, isEditing);
42
- }
43
- else if (rendering.placeholders) {
44
- const placeholders = rendering.placeholders;
45
- Object.keys(placeholders).forEach((placeholder) => {
46
- placeholders[placeholder] = personalizePlaceholder(placeholders[placeholder], variantIds, isEditing);
47
- });
48
- }
49
- return component;
50
- })
51
- .filter(Boolean);
52
- }
53
- /**
54
- * @param {ComponentRenderingWithExperiences} component component with experiences
55
- * @param {string[]} variantIds variant ids
56
- * @param {boolean} isEditing indicates if page is rendered in metadata edit mode
57
- * @returns {ComponentRendering | null} component with personalization applied or null if hidden
58
- */
59
- function personalizeComponent(component, variantIds, isEditing) {
60
- // Check if we have a page/component experience matching any of the variants (there should be at most 1)
61
- const match = Object.keys(component.experiences).find((variantId) => variantIds.includes(variantId));
62
- const variant = match && component.experiences[match];
63
- // variant and componentName can be undefined or null
64
- if (!variant && !component.componentName) {
65
- // DEFAULT IS HIDDEN
66
- if (isEditing) {
67
- component = transformToHiddenRenderingVariant(component);
68
- }
69
- else {
70
- return null;
71
- }
72
- }
73
- else if (variant && variant.componentName === null && variant.dataSource === null) {
74
- // VARIANT IS HIDDEN
75
- if (isEditing) {
76
- component = transformToHiddenRenderingVariant(component);
77
- }
78
- else {
79
- return null;
80
- }
81
- }
82
- else if (variant) {
83
- component = variant;
84
- }
85
- // remove unused experiences from layout data
86
- if (component.experiences) {
87
- component.experiences = {};
88
- }
89
- if (!component.placeholders)
90
- return component;
91
- Object.keys(component === null || component === void 0 ? void 0 : component.placeholders).forEach((placeholder) => {
92
- if (component.placeholders) {
93
- component.placeholders[placeholder] = personalizePlaceholder(component.placeholders[placeholder], variantIds);
94
- }
95
- });
96
- return component;
97
- }
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.personalizeLayout = personalizeLayout;
4
+ exports.personalizePlaceholder = personalizePlaceholder;
5
+ exports.personalizeComponent = personalizeComponent;
6
+ const constants_1 = require("../constants");
7
+ const transformToHiddenRenderingVariant = (component) => (Object.assign(Object.assign({}, component), { componentName: constants_1.HIDDEN_RENDERING_NAME, experiences: {} }));
8
+ /**
9
+ * Apply personalization to layout data. This will recursively go through all placeholders/components, check experiences nodes and replace default with object from specific experience.
10
+ * @param {LayoutServiceData} layout Layout data
11
+ * @param {string} variantId variant id
12
+ * @param {string[]} [componentVariantIds] component variant ids
13
+ * @public
14
+ */
15
+ function personalizeLayout(layout, variantId, componentVariantIds) {
16
+ var _a;
17
+ // Add (page-level) variantId to Sitecore context so that it is accessible here
18
+ layout.sitecore.context.variantId = variantId;
19
+ const placeholders = ((_a = layout.sitecore.route) === null || _a === void 0 ? void 0 : _a.placeholders) || {};
20
+ if (Object.keys(placeholders).length === 0) {
21
+ return undefined;
22
+ }
23
+ const isEditing = layout.sitecore.context.pageEditing;
24
+ if (placeholders) {
25
+ Object.keys(placeholders).forEach((placeholder) => {
26
+ placeholders[placeholder] = personalizePlaceholder(placeholders[placeholder], [variantId, ...(componentVariantIds || [])], isEditing);
27
+ });
28
+ }
29
+ return placeholders;
30
+ }
31
+ /**
32
+ * @param {Array} components components within placeholder
33
+ * @param {string[]} variantIds variant ids
34
+ * @param {boolean} isEditing indicates if page is rendered in metadata edit mode
35
+ * @returns {ComponentRendering[]} components with personalization applied
36
+ */
37
+ function personalizePlaceholder(components, variantIds, isEditing) {
38
+ return components
39
+ .map((component) => {
40
+ const rendering = component;
41
+ if (rendering.experiences !== undefined) {
42
+ return personalizeComponent(rendering, variantIds, isEditing);
43
+ }
44
+ else if (rendering.placeholders) {
45
+ const placeholders = rendering.placeholders;
46
+ Object.keys(placeholders).forEach((placeholder) => {
47
+ placeholders[placeholder] = personalizePlaceholder(placeholders[placeholder], variantIds, isEditing);
48
+ });
49
+ }
50
+ return component;
51
+ })
52
+ .filter(Boolean);
53
+ }
54
+ /**
55
+ * @param {ComponentRenderingWithExperiences} component component with experiences
56
+ * @param {string[]} variantIds variant ids
57
+ * @param {boolean} isEditing indicates if page is rendered in metadata edit mode
58
+ * @returns {ComponentRendering | null} component with personalization applied or null if hidden
59
+ */
60
+ function personalizeComponent(component, variantIds, isEditing) {
61
+ // Check if we have a page/component experience matching any of the variants (there should be at most 1)
62
+ const match = Object.keys(component.experiences).find((variantId) => variantIds.includes(variantId));
63
+ const variant = match && component.experiences[match];
64
+ // variant and componentName can be undefined or null
65
+ if (!variant && !component.componentName) {
66
+ // DEFAULT IS HIDDEN
67
+ if (isEditing) {
68
+ component = transformToHiddenRenderingVariant(component);
69
+ }
70
+ else {
71
+ return null;
72
+ }
73
+ }
74
+ else if (variant && variant.componentName === null && variant.dataSource === null) {
75
+ // VARIANT IS HIDDEN
76
+ if (isEditing) {
77
+ component = transformToHiddenRenderingVariant(component);
78
+ }
79
+ else {
80
+ return null;
81
+ }
82
+ }
83
+ else if (variant) {
84
+ component = variant;
85
+ }
86
+ // remove unused experiences from layout data
87
+ if (component.experiences) {
88
+ component.experiences = {};
89
+ }
90
+ if (!component.placeholders)
91
+ return component;
92
+ Object.keys(component === null || component === void 0 ? void 0 : component.placeholders).forEach((placeholder) => {
93
+ if (component.placeholders) {
94
+ component.placeholders[placeholder] = personalizePlaceholder(component.placeholders[placeholder], variantIds);
95
+ }
96
+ });
97
+ return component;
98
+ }
@@ -1,26 +1,30 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.PersonalizeService = void 0;
7
- const debug_1 = __importDefault(require("../debug"));
8
- const utils_1 = require("../utils");
9
- const cache_client_1 = require("../cache-client");
10
- class PersonalizeService {
11
- /**
12
- * Fetch personalize data using the Sitecore GraphQL endpoint.
13
- * @param {PersonalizeServiceConfig} config
14
- */
15
- constructor(config) {
16
- this.config = config;
17
- this.config.timeout = config.timeout || 400;
18
- this.graphQLClient = this.getGraphQLClient();
19
- this.cache = this.getCacheClient();
20
- }
21
- get query() {
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.PersonalizeService = void 0;
7
+ const debug_1 = __importDefault(require("../debug"));
8
+ const utils_1 = require("../utils");
9
+ const cache_client_1 = require("../cache-client");
10
+ /**
11
+ * Fetch personalize data using the Sitecore GraphQL endpoint.
12
+ * @public
13
+ */
14
+ class PersonalizeService {
15
+ /**
16
+ * Fetch personalize data using the Sitecore GraphQL endpoint.
17
+ * @param {PersonalizeServiceConfig} config
18
+ */
19
+ constructor(config) {
20
+ this.config = config;
21
+ this.config.timeout = config.timeout || 400;
22
+ this.graphQLClient = this.getGraphQLClient();
23
+ this.cache = this.getCacheClient();
24
+ }
25
+ get query() {
22
26
  return /* GraphQL */ `
23
- query($siteName: String!, $language: String!, $itemPath: String!) {
27
+ query ($siteName: String!, $language: String!, $itemPath: String!) {
24
28
  layout(site: $siteName, routePath: $itemPath, language: $language) {
25
29
  item {
26
30
  id
@@ -31,75 +35,75 @@ class PersonalizeService {
31
35
  }
32
36
  }
33
37
  }
34
- `;
35
- }
36
- /**
37
- * Get personalize information for a route
38
- * @param {string} itemPath page route
39
- * @param {string} language language
40
- * @param {string} siteName site name
41
- * @returns {Promise<PersonalizeInfo | undefined>} the personalize information or undefined (if itemPath / language not found)
42
- */
43
- async getPersonalizeInfo(itemPath, language, siteName) {
44
- var _a;
45
- // while other graphql services can use fetchOptions, personalize is more sensitive
46
- // we don't allow retries in it since we need to be fast
47
- debug_1.default.personalize('fetching personalize info for %s %s %s', siteName, itemPath, language);
48
- const cacheKey = this.getCacheKey(itemPath, language, siteName);
49
- let data = this.cache.getCacheValue(cacheKey);
50
- if (!data) {
51
- try {
52
- data = await this.graphQLClient.request(this.query, {
53
- siteName,
54
- itemPath,
55
- language,
56
- });
57
- this.cache.setCacheValue(cacheKey, data);
58
- }
59
- catch (error) {
60
- if ((0, utils_1.isTimeoutError)(error)) {
61
- return undefined;
62
- }
63
- throw error;
64
- }
65
- }
66
- return ((_a = data === null || data === void 0 ? void 0 : data.layout) === null || _a === void 0 ? void 0 : _a.item)
67
- ? {
68
- pageId: data.layout.item.id,
69
- variantIds: data.layout.item.personalization.variantIds,
70
- }
71
- : undefined;
72
- }
73
- /**
74
- * Gets cache client implementation
75
- * Override this method if custom cache needs to be used
76
- * @returns CacheClient instance
77
- */
78
- getCacheClient() {
79
- var _a, _b;
80
- return new cache_client_1.MemoryCacheClient({
81
- cacheEnabled: (_a = this.config.cacheEnabled) !== null && _a !== void 0 ? _a : true,
82
- cacheTimeout: (_b = this.config.cacheTimeout) !== null && _b !== void 0 ? _b : 10,
83
- });
84
- }
85
- getCacheKey(itemPath, language, siteName) {
86
- return `${siteName}-${itemPath}-${language}`;
87
- }
88
- /**
89
- * Gets a GraphQL client that can make requests to the API. Uses graphql-request as the default
90
- * library for fetching graphql data (@see GraphQLRequestClient). Override this method if you
91
- * want to use something else.
92
- * @returns {GraphQLClient} implementation
93
- */
94
- getGraphQLClient() {
95
- if (!this.config.clientFactory) {
96
- throw new Error('clientFactory needs to be provided when initializing GraphQL client.');
97
- }
98
- return this.config.clientFactory({
99
- debugger: debug_1.default.personalize,
100
- fetch: this.config.fetch,
101
- timeout: this.config.timeout,
102
- });
103
- }
104
- }
105
- exports.PersonalizeService = PersonalizeService;
38
+ `;
39
+ }
40
+ /**
41
+ * Get personalize information for a route
42
+ * @param {string} itemPath page route
43
+ * @param {string} language language
44
+ * @param {string} siteName site name
45
+ * @returns {Promise<PersonalizeInfo | undefined>} the personalize information or undefined (if itemPath / language not found)
46
+ */
47
+ async getPersonalizeInfo(itemPath, language, siteName) {
48
+ var _a;
49
+ // while other graphql services can use fetchOptions, personalize is more sensitive
50
+ // we don't allow retries in it since we need to be fast
51
+ debug_1.default.personalize('fetching personalize info for %s %s %s', siteName, itemPath, language);
52
+ const cacheKey = this.getCacheKey(itemPath, language, siteName);
53
+ let data = this.cache.getCacheValue(cacheKey);
54
+ if (!data) {
55
+ try {
56
+ data = await this.graphQLClient.request(this.query, {
57
+ siteName,
58
+ itemPath,
59
+ language,
60
+ });
61
+ this.cache.setCacheValue(cacheKey, data);
62
+ }
63
+ catch (error) {
64
+ if ((0, utils_1.isTimeoutError)(error)) {
65
+ return undefined;
66
+ }
67
+ throw error;
68
+ }
69
+ }
70
+ return ((_a = data === null || data === void 0 ? void 0 : data.layout) === null || _a === void 0 ? void 0 : _a.item)
71
+ ? {
72
+ pageId: data.layout.item.id,
73
+ variantIds: data.layout.item.personalization.variantIds,
74
+ }
75
+ : undefined;
76
+ }
77
+ /**
78
+ * Gets cache client implementation
79
+ * Override this method if custom cache needs to be used
80
+ * @returns CacheClient instance
81
+ */
82
+ getCacheClient() {
83
+ var _a, _b;
84
+ return new cache_client_1.MemoryCacheClient({
85
+ cacheEnabled: (_a = this.config.cacheEnabled) !== null && _a !== void 0 ? _a : true,
86
+ cacheTimeout: (_b = this.config.cacheTimeout) !== null && _b !== void 0 ? _b : 10,
87
+ });
88
+ }
89
+ getCacheKey(itemPath, language, siteName) {
90
+ return `${siteName}-${itemPath}-${language}`;
91
+ }
92
+ /**
93
+ * Gets a GraphQL client that can make requests to the API. Uses graphql-request as the default
94
+ * library for fetching graphql data (@see GraphQLRequestClient). Override this method if you
95
+ * want to use something else.
96
+ * @returns {GraphQLClient} implementation
97
+ */
98
+ getGraphQLClient() {
99
+ if (!this.config.clientFactory) {
100
+ throw new Error('clientFactory needs to be provided when initializing GraphQL client.');
101
+ }
102
+ return this.config.clientFactory({
103
+ debugger: debug_1.default.personalize,
104
+ fetch: this.config.fetch,
105
+ timeout: this.config.timeout,
106
+ });
107
+ }
108
+ }
109
+ exports.PersonalizeService = PersonalizeService;