@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,20 +1,24 @@
1
- import debug from '../debug';
2
- import { isTimeoutError } from '../utils';
3
- import { MemoryCacheClient } from '../cache-client';
4
- export class PersonalizeService {
5
- /**
6
- * Fetch personalize data using the Sitecore GraphQL endpoint.
7
- * @param {PersonalizeServiceConfig} config
8
- */
9
- constructor(config) {
10
- this.config = config;
11
- this.config.timeout = config.timeout || 400;
12
- this.graphQLClient = this.getGraphQLClient();
13
- this.cache = this.getCacheClient();
14
- }
15
- get query() {
1
+ import debug from '../debug';
2
+ import { isTimeoutError } from '../utils';
3
+ import { MemoryCacheClient } from '../cache-client';
4
+ /**
5
+ * Fetch personalize data using the Sitecore GraphQL endpoint.
6
+ * @public
7
+ */
8
+ export class PersonalizeService {
9
+ /**
10
+ * Fetch personalize data using the Sitecore GraphQL endpoint.
11
+ * @param {PersonalizeServiceConfig} config
12
+ */
13
+ constructor(config) {
14
+ this.config = config;
15
+ this.config.timeout = config.timeout || 400;
16
+ this.graphQLClient = this.getGraphQLClient();
17
+ this.cache = this.getCacheClient();
18
+ }
19
+ get query() {
16
20
  return /* GraphQL */ `
17
- query($siteName: String!, $language: String!, $itemPath: String!) {
21
+ query ($siteName: String!, $language: String!, $itemPath: String!) {
18
22
  layout(site: $siteName, routePath: $itemPath, language: $language) {
19
23
  item {
20
24
  id
@@ -25,74 +29,74 @@ export class PersonalizeService {
25
29
  }
26
30
  }
27
31
  }
28
- `;
29
- }
30
- /**
31
- * Get personalize information for a route
32
- * @param {string} itemPath page route
33
- * @param {string} language language
34
- * @param {string} siteName site name
35
- * @returns {Promise<PersonalizeInfo | undefined>} the personalize information or undefined (if itemPath / language not found)
36
- */
37
- async getPersonalizeInfo(itemPath, language, siteName) {
38
- var _a;
39
- // while other graphql services can use fetchOptions, personalize is more sensitive
40
- // we don't allow retries in it since we need to be fast
41
- debug.personalize('fetching personalize info for %s %s %s', siteName, itemPath, language);
42
- const cacheKey = this.getCacheKey(itemPath, language, siteName);
43
- let data = this.cache.getCacheValue(cacheKey);
44
- if (!data) {
45
- try {
46
- data = await this.graphQLClient.request(this.query, {
47
- siteName,
48
- itemPath,
49
- language,
50
- });
51
- this.cache.setCacheValue(cacheKey, data);
52
- }
53
- catch (error) {
54
- if (isTimeoutError(error)) {
55
- return undefined;
56
- }
57
- throw error;
58
- }
59
- }
60
- return ((_a = data === null || data === void 0 ? void 0 : data.layout) === null || _a === void 0 ? void 0 : _a.item)
61
- ? {
62
- pageId: data.layout.item.id,
63
- variantIds: data.layout.item.personalization.variantIds,
64
- }
65
- : undefined;
66
- }
67
- /**
68
- * Gets cache client implementation
69
- * Override this method if custom cache needs to be used
70
- * @returns CacheClient instance
71
- */
72
- getCacheClient() {
73
- var _a, _b;
74
- return new MemoryCacheClient({
75
- cacheEnabled: (_a = this.config.cacheEnabled) !== null && _a !== void 0 ? _a : true,
76
- cacheTimeout: (_b = this.config.cacheTimeout) !== null && _b !== void 0 ? _b : 10,
77
- });
78
- }
79
- getCacheKey(itemPath, language, siteName) {
80
- return `${siteName}-${itemPath}-${language}`;
81
- }
82
- /**
83
- * Gets a GraphQL client that can make requests to the API. Uses graphql-request as the default
84
- * library for fetching graphql data (@see GraphQLRequestClient). Override this method if you
85
- * want to use something else.
86
- * @returns {GraphQLClient} implementation
87
- */
88
- getGraphQLClient() {
89
- if (!this.config.clientFactory) {
90
- throw new Error('clientFactory needs to be provided when initializing GraphQL client.');
91
- }
92
- return this.config.clientFactory({
93
- debugger: debug.personalize,
94
- fetch: this.config.fetch,
95
- timeout: this.config.timeout,
96
- });
97
- }
98
- }
32
+ `;
33
+ }
34
+ /**
35
+ * Get personalize information for a route
36
+ * @param {string} itemPath page route
37
+ * @param {string} language language
38
+ * @param {string} siteName site name
39
+ * @returns {Promise<PersonalizeInfo | undefined>} the personalize information or undefined (if itemPath / language not found)
40
+ */
41
+ async getPersonalizeInfo(itemPath, language, siteName) {
42
+ var _a;
43
+ // while other graphql services can use fetchOptions, personalize is more sensitive
44
+ // we don't allow retries in it since we need to be fast
45
+ debug.personalize('fetching personalize info for %s %s %s', siteName, itemPath, language);
46
+ const cacheKey = this.getCacheKey(itemPath, language, siteName);
47
+ let data = this.cache.getCacheValue(cacheKey);
48
+ if (!data) {
49
+ try {
50
+ data = await this.graphQLClient.request(this.query, {
51
+ siteName,
52
+ itemPath,
53
+ language,
54
+ });
55
+ this.cache.setCacheValue(cacheKey, data);
56
+ }
57
+ catch (error) {
58
+ if (isTimeoutError(error)) {
59
+ return undefined;
60
+ }
61
+ throw error;
62
+ }
63
+ }
64
+ return ((_a = data === null || data === void 0 ? void 0 : data.layout) === null || _a === void 0 ? void 0 : _a.item)
65
+ ? {
66
+ pageId: data.layout.item.id,
67
+ variantIds: data.layout.item.personalization.variantIds,
68
+ }
69
+ : undefined;
70
+ }
71
+ /**
72
+ * Gets cache client implementation
73
+ * Override this method if custom cache needs to be used
74
+ * @returns CacheClient instance
75
+ */
76
+ getCacheClient() {
77
+ var _a, _b;
78
+ return new MemoryCacheClient({
79
+ cacheEnabled: (_a = this.config.cacheEnabled) !== null && _a !== void 0 ? _a : true,
80
+ cacheTimeout: (_b = this.config.cacheTimeout) !== null && _b !== void 0 ? _b : 10,
81
+ });
82
+ }
83
+ getCacheKey(itemPath, language, siteName) {
84
+ return `${siteName}-${itemPath}-${language}`;
85
+ }
86
+ /**
87
+ * Gets a GraphQL client that can make requests to the API. Uses graphql-request as the default
88
+ * library for fetching graphql data (@see GraphQLRequestClient). Override this method if you
89
+ * want to use something else.
90
+ * @returns {GraphQLClient} implementation
91
+ */
92
+ getGraphQLClient() {
93
+ if (!this.config.clientFactory) {
94
+ throw new Error('clientFactory needs to be provided when initializing GraphQL client.');
95
+ }
96
+ return this.config.clientFactory({
97
+ debugger: debug.personalize,
98
+ fetch: this.config.fetch,
99
+ timeout: this.config.timeout,
100
+ });
101
+ }
102
+ }
@@ -1,128 +1,135 @@
1
- export const DEFAULT_VARIANT = '_default';
2
- export const VARIANT_PREFIX = '_variantId_';
3
- /**
4
- * Get a personalized rewrite path for given pathname
5
- * @param {string} pathname the pathname
6
- * @param {string[]} variantIds the variantIds to include in the rewrite
7
- * @returns {string} the rewrite path
8
- */
9
- export function getPersonalizedRewrite(pathname, variantIds) {
10
- const path = pathname.endsWith('/') ? pathname.slice(0, -1) : pathname;
11
- return `${path}${variantIds.map((variantId) => `/${VARIANT_PREFIX}${variantId}`).join('')}`;
12
- }
13
- /**
14
- * Get personalize data from the rewrite path
15
- * @param {string} pathname the pathname
16
- * @returns {PersonalizedRewriteData} the personalize data from the rewrite
17
- */
18
- export function getPersonalizedRewriteData(pathname) {
19
- const segments = pathname.split('/');
20
- const variantIds = [];
21
- segments.forEach((segment) => {
22
- const result = segment.match(`${VARIANT_PREFIX}(.*$)`);
23
- if (result) {
24
- variantIds.push(result[1]);
25
- }
26
- });
27
- return getGroomedVariantIds(variantIds);
28
- }
29
- /**
30
- * Parses a list of variantIds and divides into layout and component variants
31
- * @param {string[]} variantIds the list of variant IDs for a page
32
- * @returns {PersonalizedRewriteData} object with variant IDs sorted
33
- */
34
- export function getGroomedVariantIds(variantIds) {
35
- const data = {
36
- variantId: DEFAULT_VARIANT,
37
- componentVariantIds: [],
38
- };
39
- variantIds.forEach((variantId) => {
40
- var _a;
41
- if (variantId.includes('_')) {
42
- // Component-level personalization in format "<ComponentID>_<VariantID>"
43
- // There can be multiple
44
- (_a = data.componentVariantIds) === null || _a === void 0 ? void 0 : _a.push(variantId);
45
- }
46
- else {
47
- // Embedded (page-level) personalization in format "<VariantID>"
48
- // There should be only one
49
- data.variantId = variantId;
50
- }
51
- });
52
- return data;
53
- }
54
- /**
55
- * Normalize a personalized rewrite path (remove personalize data)
56
- * @param {string} pathname the pathname
57
- * @returns {string} the pathname with personalize data removed
58
- */
59
- export function normalizePersonalizedRewrite(pathname) {
60
- if (!pathname.includes(VARIANT_PREFIX)) {
61
- return pathname;
62
- }
63
- let segments = pathname.split('/');
64
- segments = segments.filter((segment) => !segment.includes(VARIANT_PREFIX));
65
- const result = segments.join('/');
66
- // return root path if all segments were personalize data
67
- return result ? result : '/';
68
- }
69
- /**
70
- * Static utility class for Sitecore CDP
71
- */
72
- export class CdpHelper {
73
- /**
74
- * Gets the page variant id for CDP in the required format
75
- * @param {string} pageId the page id
76
- * @param {string} language the language
77
- * @param {string} variantId the variant id
78
- * @param {string} [scope] the scope value
79
- * @returns {string} the formatted page variant id
80
- */
81
- static getPageVariantId(pageId, language, variantId, scope) {
82
- const formattedPageId = pageId.replace(/[{}-]/g, '');
83
- const formattedLanguage = language.replace('-', '_');
84
- const scopeId = scope ? `${this.normalizeScope(scope)}_` : '';
85
- let formattedVariantId = variantId;
86
- if (!variantId || variantId === DEFAULT_VARIANT) {
87
- formattedVariantId = 'default';
88
- }
89
- return `${scopeId}${formattedPageId}_${formattedLanguage}_${formattedVariantId}`.toLowerCase();
90
- }
91
- /**
92
- * Gets the friendly id for (page-level) Embedded Personalization in the required format `embedded_[<scope>_]<id>_<lang>`
93
- * @param {string} pageId the page id
94
- * @param {string} language the language
95
- * @param {string} [scope] the scope value
96
- * @returns {string} the friendly id
97
- */
98
- static getPageFriendlyId(pageId, language, scope) {
99
- const formattedPageId = pageId.replace(/[{}-]/g, '');
100
- const formattedLanguage = language.replace('-', '_');
101
- const scopeId = scope ? `${this.normalizeScope(scope)}_` : '';
102
- return `embedded_${scopeId}${formattedPageId}_${formattedLanguage}`.toLowerCase();
103
- }
104
- /**
105
- * Gets the friendly id for Component A/B Testing in the required format `component_[<scope>_]<pageId>_<componentId>_<language>*`
106
- * @param {string} pageId the page id
107
- * @param {string} componentId the component id
108
- * @param {string} language the language
109
- * @param {string} [scope] the scope value
110
- * @returns {string} the friendly id
111
- */
112
- static getComponentFriendlyId(pageId, componentId, language, scope) {
113
- const formattedPageId = pageId.replace(/[{}-]/g, '');
114
- const formattedComponentId = componentId.replace(/[{}-]/g, '');
115
- const formattedLanguage = language.replace('-', '_');
116
- const scopeId = scope ? `${this.normalizeScope(scope)}_` : '';
117
- return `component_${scopeId}${formattedPageId}_${formattedComponentId}_${formattedLanguage}*`.toLowerCase();
118
- }
119
- /**
120
- * Normalizes the scope from the given string value
121
- * Removes all non-alphanumeric characters
122
- * @param {string} [scope] the scope value
123
- * @returns {string} normalized scope value
124
- */
125
- static normalizeScope(scope) {
126
- return (scope === null || scope === void 0 ? void 0 : scope.replace(/[^a-zA-Z0-9]+/g, '')) || '';
127
- }
128
- }
1
+ /** @internal */
2
+ export const DEFAULT_VARIANT = '_default';
3
+ /** @internal */
4
+ export const VARIANT_PREFIX = '_variantId_';
5
+ /**
6
+ * Get a personalized rewrite path for given pathname
7
+ * @param {string} pathname the pathname
8
+ * @param {string[]} variantIds the variantIds to include in the rewrite
9
+ * @returns {string} the rewrite path
10
+ * @public
11
+ */
12
+ export function getPersonalizedRewrite(pathname, variantIds) {
13
+ const path = pathname.endsWith('/') ? pathname.slice(0, -1) : pathname;
14
+ return `${path}${variantIds.map((variantId) => `/${VARIANT_PREFIX}${variantId}`).join('')}`;
15
+ }
16
+ /**
17
+ * Get personalize data from the rewrite path
18
+ * @param {string} pathname the pathname
19
+ * @returns {PersonalizedRewriteData} the personalize data from the rewrite
20
+ * @public
21
+ */
22
+ export function getPersonalizedRewriteData(pathname) {
23
+ const segments = pathname.split('/');
24
+ const variantIds = [];
25
+ segments.forEach((segment) => {
26
+ const result = segment.match(`${VARIANT_PREFIX}(.*$)`);
27
+ if (result) {
28
+ variantIds.push(result[1]);
29
+ }
30
+ });
31
+ return getGroomedVariantIds(variantIds);
32
+ }
33
+ /**
34
+ * Parses a list of variantIds and divides into layout and component variants
35
+ * @param {string[]} variantIds the list of variant IDs for a page
36
+ * @returns {PersonalizedRewriteData} object with variant IDs sorted
37
+ * @public
38
+ */
39
+ export function getGroomedVariantIds(variantIds) {
40
+ const data = {
41
+ variantId: DEFAULT_VARIANT,
42
+ componentVariantIds: [],
43
+ };
44
+ variantIds.forEach((variantId) => {
45
+ var _a;
46
+ if (variantId.includes('_')) {
47
+ // Component-level personalization in format "<ComponentID>_<VariantID>"
48
+ // There can be multiple
49
+ (_a = data.componentVariantIds) === null || _a === void 0 ? void 0 : _a.push(variantId);
50
+ }
51
+ else {
52
+ // Embedded (page-level) personalization in format "<VariantID>"
53
+ // There should be only one
54
+ data.variantId = variantId;
55
+ }
56
+ });
57
+ return data;
58
+ }
59
+ /**
60
+ * Normalize a personalized rewrite path (remove personalize data)
61
+ * @param {string} pathname the pathname
62
+ * @returns {string} the pathname with personalize data removed
63
+ * @public
64
+ */
65
+ export function normalizePersonalizedRewrite(pathname) {
66
+ if (!pathname.includes(VARIANT_PREFIX)) {
67
+ return pathname;
68
+ }
69
+ let segments = pathname.split('/');
70
+ segments = segments.filter((segment) => !segment.includes(VARIANT_PREFIX));
71
+ const result = segments.join('/');
72
+ // return root path if all segments were personalize data
73
+ return result ? result : '/';
74
+ }
75
+ /**
76
+ * Static utility class for Sitecore CDP
77
+ * @public
78
+ */
79
+ export class CdpHelper {
80
+ /**
81
+ * Gets the page variant id for CDP in the required format
82
+ * @param {string} pageId the page id
83
+ * @param {string} language the language
84
+ * @param {string} variantId the variant id
85
+ * @param {string} [scope] the scope value
86
+ * @returns {string} the formatted page variant id
87
+ */
88
+ static getPageVariantId(pageId, language, variantId, scope) {
89
+ const formattedPageId = pageId.replace(/[{}-]/g, '');
90
+ const formattedLanguage = language.replace('-', '_');
91
+ const scopeId = scope ? `${this.normalizeScope(scope)}_` : '';
92
+ let formattedVariantId = variantId;
93
+ if (!variantId || variantId === DEFAULT_VARIANT) {
94
+ formattedVariantId = 'default';
95
+ }
96
+ return `${scopeId}${formattedPageId}_${formattedLanguage}_${formattedVariantId}`.toLowerCase();
97
+ }
98
+ /**
99
+ * Gets the friendly id for (page-level) Embedded Personalization in the required format `embedded_[<scope>_]<id>_<lang>`
100
+ * @param {string} pageId the page id
101
+ * @param {string} language the language
102
+ * @param {string} [scope] the scope value
103
+ * @returns {string} the friendly id
104
+ */
105
+ static getPageFriendlyId(pageId, language, scope) {
106
+ const formattedPageId = pageId.replace(/[{}-]/g, '');
107
+ const formattedLanguage = language.replace('-', '_');
108
+ const scopeId = scope ? `${this.normalizeScope(scope)}_` : '';
109
+ return `embedded_${scopeId}${formattedPageId}_${formattedLanguage}`.toLowerCase();
110
+ }
111
+ /**
112
+ * Gets the friendly id for Component A/B Testing in the required format `component_[<scope>_]<pageId>_<componentId>_<language>*`
113
+ * @param {string} pageId the page id
114
+ * @param {string} componentId the component id
115
+ * @param {string} language the language
116
+ * @param {string} [scope] the scope value
117
+ * @returns {string} the friendly id
118
+ */
119
+ static getComponentFriendlyId(pageId, componentId, language, scope) {
120
+ const formattedPageId = pageId.replace(/[{}-]/g, '');
121
+ const formattedComponentId = componentId.replace(/[{}-]/g, '');
122
+ const formattedLanguage = language.replace('-', '_');
123
+ const scopeId = scope ? `${this.normalizeScope(scope)}_` : '';
124
+ return `component_${scopeId}${formattedPageId}_${formattedComponentId}_${formattedLanguage}*`.toLowerCase();
125
+ }
126
+ /**
127
+ * Normalizes the scope from the given string value
128
+ * Removes all non-alphanumeric characters
129
+ * @param {string} [scope] the scope value
130
+ * @returns {string} normalized scope value
131
+ */
132
+ static normalizeScope(scope) {
133
+ return (scope === null || scope === void 0 ? void 0 : scope.replace(/[^a-zA-Z0-9]+/g, '')) || '';
134
+ }
135
+ }
@@ -1,38 +1,39 @@
1
- /**
2
- * Represents a default retry strategy for handling retry attempts in case of specific HTTP status codes.
3
- * This class implements the RetryStrategy interface and provides methods to determine whether a request
4
- * should be retried and calculates the delay before the next retry attempt.
5
- */
6
- export class DefaultRetryStrategy {
7
- /**
8
- * @param {object} options Configurable options for retry mechanism.
9
- * @param {number[]} [options.statusCodes] HTTP status codes to trigger retries on. Default is [429].
10
- * @param {string[]} [options.errorCodes] Node error codes to trigger retries. Default is ['ECONNRESET', 'ETIMEDOUT', 'EPROTO'].
11
- * @param {number} [options.factor] Factor by which the delay increases with each retry attempt. Default is 2.
12
- */
13
- constructor(options = {}) {
14
- this.statusCodes = options.statusCodes || [429];
15
- this.errorCodes = options.errorCodes || ['ECONNRESET', 'ETIMEDOUT', 'EPROTO'];
16
- this.factor = options.factor || 2;
17
- }
18
- shouldRetry(error, attempt, retries) {
19
- var _a;
20
- const isStatusCodeError = ((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) !== undefined && this.statusCodes.includes(error.response.status);
21
- const isNodeErrorCode = error.code !== undefined && this.errorCodes.includes(error.code);
22
- return retries > 0 && attempt <= retries && (isStatusCodeError || isNodeErrorCode);
23
- }
24
- getDelay(error, attempt) {
25
- var _a;
26
- const rawHeaders = (_a = error.response) === null || _a === void 0 ? void 0 : _a.headers;
27
- const retryAfterHeader = rawHeaders === null || rawHeaders === void 0 ? void 0 : rawHeaders.get('Retry-After');
28
- if (retryAfterHeader !== null &&
29
- retryAfterHeader !== undefined &&
30
- retryAfterHeader.trim() !== '') {
31
- const delaySeconds = Number.parseFloat(retryAfterHeader);
32
- return delaySeconds * 1000;
33
- }
34
- else {
35
- return Math.pow(this.factor, attempt - 1) * 1000;
36
- }
37
- }
38
- }
1
+ /**
2
+ * Represents a default retry strategy for handling retry attempts in case of specific HTTP status codes.
3
+ * This class implements the RetryStrategy interface and provides methods to determine whether a request
4
+ * should be retried and calculates the delay before the next retry attempt.
5
+ * @public
6
+ */
7
+ export class DefaultRetryStrategy {
8
+ /**
9
+ * @param {object} options Configurable options for retry mechanism.
10
+ * @param {number[]} [options.statusCodes] HTTP status codes to trigger retries on. Default is [429].
11
+ * @param {string[]} [options.errorCodes] Node error codes to trigger retries. Default is ['ECONNRESET', 'ETIMEDOUT', 'EPROTO'].
12
+ * @param {number} [options.factor] Factor by which the delay increases with each retry attempt. Default is 2.
13
+ */
14
+ constructor(options = {}) {
15
+ this.statusCodes = options.statusCodes || [429];
16
+ this.errorCodes = options.errorCodes || ['ECONNRESET', 'ETIMEDOUT', 'EPROTO'];
17
+ this.factor = options.factor || 2;
18
+ }
19
+ shouldRetry(error, attempt, retries) {
20
+ var _a;
21
+ const isStatusCodeError = ((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) !== undefined && this.statusCodes.includes(error.response.status);
22
+ const isNodeErrorCode = error.code !== undefined && this.errorCodes.includes(error.code);
23
+ return retries > 0 && attempt <= retries && (isStatusCodeError || isNodeErrorCode);
24
+ }
25
+ getDelay(error, attempt) {
26
+ var _a;
27
+ const rawHeaders = (_a = error.response) === null || _a === void 0 ? void 0 : _a.headers;
28
+ const retryAfterHeader = rawHeaders === null || rawHeaders === void 0 ? void 0 : rawHeaders.get('Retry-After');
29
+ if (retryAfterHeader !== null &&
30
+ retryAfterHeader !== undefined &&
31
+ retryAfterHeader.trim() !== '') {
32
+ const delaySeconds = Number.parseFloat(retryAfterHeader);
33
+ return delaySeconds * 1000;
34
+ }
35
+ else {
36
+ return Math.pow(this.factor, attempt - 1) * 1000;
37
+ }
38
+ }
39
+ }