@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.
- package/README.md +7 -7
- package/dist/cjs/cache-client.js +55 -54
- package/dist/cjs/client/constants.js +7 -7
- package/dist/cjs/client/edge-proxy.js +24 -22
- package/dist/cjs/client/index.js +15 -15
- package/dist/cjs/client/models.js +2 -2
- package/dist/cjs/client/sitecore-client.js +421 -419
- package/dist/cjs/client/utils.js +47 -46
- package/dist/cjs/config/define-config.js +194 -193
- package/dist/cjs/config/index.js +7 -7
- package/dist/cjs/config/models.js +12 -11
- package/dist/cjs/config-cli/define-cli-config.js +23 -22
- package/dist/cjs/config-cli/index.js +7 -7
- package/dist/cjs/config-cli/models.js +8 -7
- package/dist/cjs/constants.js +49 -17
- package/dist/cjs/debug.js +48 -46
- package/dist/cjs/editing/codegen/index.js +14 -9
- package/dist/cjs/editing/codegen/preview.js +277 -193
- package/dist/cjs/editing/component-layout-service.js +62 -61
- package/dist/cjs/editing/design-library.js +183 -126
- package/dist/cjs/editing/editing-service.js +75 -74
- package/dist/cjs/editing/index.js +33 -27
- package/dist/cjs/editing/metadata.js +42 -42
- package/dist/cjs/editing/models.js +44 -38
- package/dist/cjs/editing/utils.js +108 -90
- package/dist/cjs/form/form.js +81 -78
- package/dist/cjs/form/index.js +7 -7
- package/dist/cjs/graphql-request-client.js +108 -107
- package/dist/cjs/i18n/dictionary-service.js +122 -121
- package/dist/cjs/i18n/index.js +7 -7
- package/dist/cjs/i18n/utils.js +16 -15
- package/dist/cjs/index.js +60 -60
- package/dist/cjs/layout/content-styles.js +72 -71
- package/dist/cjs/layout/index.js +24 -24
- package/dist/cjs/layout/layout-service.js +62 -57
- package/dist/cjs/layout/models.js +39 -34
- package/dist/cjs/layout/themes.js +76 -75
- package/dist/cjs/layout/utils.js +117 -110
- package/dist/cjs/media/index.js +38 -38
- package/dist/cjs/media/media-api.js +100 -96
- package/dist/cjs/models.js +2 -2
- package/dist/cjs/native-fetcher.js +194 -179
- package/dist/cjs/personalize/index.js +15 -15
- package/dist/cjs/personalize/layout-personalizer.js +98 -97
- package/dist/cjs/personalize/personalize-service.js +98 -94
- package/dist/cjs/personalize/utils.js +143 -136
- package/dist/cjs/retries.js +43 -42
- package/dist/cjs/site/error-pages-service.js +65 -64
- package/dist/cjs/site/index.js +26 -26
- package/dist/cjs/site/models.js +2 -2
- package/dist/cjs/site/redirects-service.js +94 -81
- package/dist/cjs/site/robots-service.js +66 -65
- package/dist/cjs/site/site-resolver.js +73 -72
- package/dist/cjs/site/siteinfo-service.js +84 -80
- package/dist/cjs/site/sitemap-xml-service.js +84 -83
- package/dist/cjs/site/sitepath-service.js +165 -164
- package/dist/cjs/site/utils.js +55 -47
- package/dist/cjs/sitecore-service-base.js +36 -36
- package/dist/cjs/tools/auth/flow.js +65 -64
- package/dist/cjs/tools/auth/index.js +5 -5
- package/dist/cjs/tools/auth/models.js +2 -2
- package/dist/cjs/tools/auth/tenant-store.js +38 -38
- package/dist/cjs/tools/codegen/component-generation.js +52 -50
- package/dist/cjs/tools/codegen/extract-files.js +105 -107
- package/dist/cjs/tools/codegen/import-map.js +401 -349
- package/dist/cjs/tools/codegen/utils.js +418 -418
- package/dist/cjs/tools/generate-map.js +2 -2
- package/dist/cjs/tools/generateMetadata.js +36 -35
- package/dist/cjs/tools/generateSites.js +59 -58
- package/dist/cjs/tools/index.js +75 -73
- package/dist/cjs/tools/scaffold.js +60 -59
- package/dist/cjs/tools/templating/components.js +96 -266
- package/dist/cjs/tools/templating/index.js +11 -14
- package/dist/cjs/tools/templating/plugins.js +80 -78
- package/dist/cjs/tools/templating/utils.js +67 -66
- package/dist/cjs/utils/ensurePath.js +20 -20
- package/dist/cjs/utils/env.js +28 -27
- package/dist/cjs/utils/globalCache.js +55 -0
- package/dist/cjs/utils/index.js +26 -21
- package/dist/cjs/utils/is-server.js +11 -10
- package/dist/cjs/utils/normalize-url.js +5 -5
- package/dist/cjs/utils/timeout-promise.js +31 -31
- package/dist/cjs/utils/utils.js +254 -229
- package/dist/esm/cache-client.js +51 -50
- package/dist/esm/client/constants.js +4 -4
- package/dist/esm/client/edge-proxy.js +19 -17
- package/dist/esm/client/index.js +5 -5
- package/dist/esm/client/models.js +1 -1
- package/dist/esm/client/sitecore-client.js +414 -412
- package/dist/esm/client/utils.js +43 -42
- package/dist/esm/config/define-config.js +188 -187
- package/dist/esm/config/index.js +2 -2
- package/dist/esm/config/models.js +9 -8
- package/dist/esm/config-cli/define-cli-config.js +19 -18
- package/dist/esm/config-cli/index.js +2 -2
- package/dist/esm/config-cli/models.js +5 -4
- package/dist/esm/constants.js +46 -14
- package/dist/esm/debug.js +41 -39
- package/dist/esm/editing/codegen/index.js +1 -1
- package/dist/esm/editing/codegen/preview.js +263 -185
- package/dist/esm/editing/component-layout-service.js +55 -54
- package/dist/esm/editing/design-library.js +171 -117
- package/dist/esm/editing/editing-service.js +68 -67
- package/dist/esm/editing/index.js +6 -5
- package/dist/esm/editing/metadata.js +39 -39
- package/dist/esm/editing/models.js +41 -35
- package/dist/esm/editing/utils.js +98 -80
- package/dist/esm/form/form.js +72 -69
- package/dist/esm/form/index.js +1 -1
- package/dist/esm/graphql-request-client.js +101 -100
- package/dist/esm/i18n/dictionary-service.js +115 -114
- package/dist/esm/i18n/index.js +2 -2
- package/dist/esm/i18n/utils.js +13 -12
- package/dist/esm/index.js +13 -13
- package/dist/esm/layout/content-styles.js +64 -63
- package/dist/esm/layout/index.js +6 -6
- package/dist/esm/layout/layout-service.js +55 -50
- package/dist/esm/layout/models.js +36 -31
- package/dist/esm/layout/themes.js +71 -70
- package/dist/esm/layout/utils.js +109 -102
- package/dist/esm/media/index.js +2 -2
- package/dist/esm/media/media-api.js +90 -86
- package/dist/esm/models.js +1 -1
- package/dist/esm/native-fetcher.js +187 -172
- package/dist/esm/personalize/index.js +3 -3
- package/dist/esm/personalize/layout-personalizer.js +93 -92
- package/dist/esm/personalize/personalize-service.js +91 -87
- package/dist/esm/personalize/utils.js +135 -128
- package/dist/esm/retries.js +39 -38
- package/dist/esm/site/error-pages-service.js +58 -57
- package/dist/esm/site/index.js +8 -8
- package/dist/esm/site/models.js +1 -1
- package/dist/esm/site/redirects-service.js +87 -74
- package/dist/esm/site/robots-service.js +59 -58
- package/dist/esm/site/site-resolver.js +69 -68
- package/dist/esm/site/siteinfo-service.js +77 -73
- package/dist/esm/site/sitemap-xml-service.js +77 -76
- package/dist/esm/site/sitepath-service.js +157 -156
- package/dist/esm/site/utils.js +49 -41
- package/dist/esm/sitecore-service-base.js +29 -29
- package/dist/esm/tools/auth/flow.js +62 -61
- package/dist/esm/tools/auth/index.js +1 -1
- package/dist/esm/tools/auth/models.js +1 -1
- package/dist/esm/tools/auth/tenant-store.js +35 -35
- package/dist/esm/tools/codegen/component-generation.js +44 -42
- package/dist/esm/tools/codegen/extract-files.js +99 -101
- package/dist/esm/tools/codegen/import-map.js +358 -306
- package/dist/esm/tools/codegen/utils.js +373 -373
- package/dist/esm/tools/generate-map.js +1 -1
- package/dist/esm/tools/generateMetadata.js +29 -28
- package/dist/esm/tools/generateSites.js +52 -51
- package/dist/esm/tools/index.js +28 -27
- package/dist/esm/tools/scaffold.js +52 -51
- package/dist/esm/tools/templating/components.js +59 -223
- package/dist/esm/tools/templating/index.js +3 -3
- package/dist/esm/tools/templating/plugins.js +72 -70
- package/dist/esm/tools/templating/utils.js +59 -58
- package/dist/esm/utils/ensurePath.js +13 -13
- package/dist/esm/utils/env.js +24 -23
- package/dist/esm/utils/globalCache.js +49 -0
- package/dist/esm/utils/index.js +4 -3
- package/dist/esm/utils/is-server.js +9 -8
- package/dist/esm/utils/normalize-url.js +1 -1
- package/dist/esm/utils/timeout-promise.js +28 -28
- package/dist/esm/utils/utils.js +238 -213
- package/package.json +73 -5
- package/types/cache-client.d.ts +68 -64
- package/types/cache-client.d.ts.map +1 -0
- package/types/client/constants.d.ts +5 -4
- package/types/client/constants.d.ts.map +1 -0
- package/types/client/edge-proxy.d.ts +18 -15
- package/types/client/edge-proxy.d.ts.map +1 -0
- package/types/client/index.d.ts +8 -7
- package/types/client/index.d.ts.map +1 -0
- package/types/client/models.d.ts +21 -19
- package/types/client/models.d.ts.map +1 -0
- package/types/client/sitecore-client.d.ts +338 -327
- package/types/client/sitecore-client.d.ts.map +1 -0
- package/types/client/utils.d.ts +15 -9
- package/types/client/utils.d.ts.map +1 -0
- package/types/config/define-config.d.ts +20 -18
- package/types/config/define-config.d.ts.map +1 -0
- package/types/config/index.d.ts +3 -2
- package/types/config/index.d.ts.map +1 -0
- package/types/config/models.d.ts +287 -268
- package/types/config/models.d.ts.map +1 -0
- package/types/config-cli/define-cli-config.d.ts +9 -7
- package/types/config-cli/define-cli-config.d.ts.map +1 -0
- package/types/config-cli/index.d.ts +3 -2
- package/types/config-cli/index.d.ts.map +1 -0
- package/types/config-cli/models.d.ts +6 -4
- package/types/config-cli/models.d.ts.map +1 -0
- package/types/constants.d.ts +44 -11
- package/types/constants.d.ts.map +1 -0
- package/types/debug.d.ts +35 -28
- package/types/debug.d.ts.map +1 -0
- package/types/editing/codegen/index.d.ts +2 -1
- package/types/editing/codegen/index.d.ts.map +1 -0
- package/types/editing/codegen/preview.d.ts +256 -195
- package/types/editing/codegen/preview.d.ts.map +1 -0
- package/types/editing/component-layout-service.d.ts +84 -80
- package/types/editing/component-layout-service.d.ts.map +1 -0
- package/types/editing/design-library.d.ts +111 -63
- package/types/editing/design-library.d.ts.map +1 -0
- package/types/editing/editing-service.d.ts +72 -62
- package/types/editing/editing-service.d.ts.map +1 -0
- package/types/editing/index.d.ts +7 -6
- package/types/editing/index.d.ts.map +1 -0
- package/types/editing/metadata.d.ts +8 -7
- package/types/editing/metadata.d.ts.map +1 -0
- package/types/editing/models.d.ts +103 -92
- package/types/editing/models.d.ts.map +1 -0
- package/types/editing/utils.d.ts +91 -74
- package/types/editing/utils.d.ts.map +1 -0
- package/types/form/form.d.ts +25 -21
- package/types/form/form.d.ts.map +1 -0
- package/types/form/index.d.ts +2 -1
- package/types/form/index.d.ts.map +1 -0
- package/types/graphql-request-client.d.ts +112 -105
- package/types/graphql-request-client.d.ts.map +1 -0
- package/types/i18n/dictionary-service.d.ts +135 -131
- package/types/i18n/dictionary-service.d.ts.map +1 -0
- package/types/i18n/index.d.ts +3 -2
- package/types/i18n/index.d.ts.map +1 -0
- package/types/i18n/utils.d.ts +9 -7
- package/types/i18n/utils.d.ts.map +1 -0
- package/types/index.d.ts +13 -12
- package/types/index.d.ts.map +1 -0
- package/types/layout/content-styles.d.ts +20 -18
- package/types/layout/content-styles.d.ts.map +1 -0
- package/types/layout/index.d.ts +6 -5
- package/types/layout/index.d.ts.map +1 -0
- package/types/layout/layout-service.d.ts +45 -35
- package/types/layout/layout-service.d.ts.map +1 -0
- package/types/layout/models.d.ts +174 -151
- package/types/layout/models.d.ts.map +1 -0
- package/types/layout/themes.d.ts +13 -11
- package/types/layout/themes.d.ts.map +1 -0
- package/types/layout/utils.d.ts +56 -41
- package/types/layout/utils.d.ts.map +1 -0
- package/types/media/index.d.ts +3 -2
- package/types/media/index.d.ts.map +1 -0
- package/types/media/media-api.d.ts +60 -55
- package/types/media/media-api.d.ts.map +1 -0
- package/types/models.d.ts +94 -84
- package/types/models.d.ts.map +1 -0
- package/types/native-fetcher.d.ts +124 -114
- package/types/native-fetcher.d.ts.map +1 -0
- package/types/personalize/index.d.ts +4 -3
- package/types/personalize/index.d.ts.map +1 -0
- package/types/personalize/layout-personalizer.d.ts +29 -27
- package/types/personalize/layout-personalizer.d.ts.map +1 -0
- package/types/personalize/personalize-service.d.ts +90 -80
- package/types/personalize/personalize-service.d.ts.map +1 -0
- package/types/personalize/utils.d.ts +78 -69
- package/types/personalize/utils.d.ts.map +1 -0
- package/types/retries.d.ts +26 -24
- package/types/retries.d.ts.map +1 -0
- package/types/site/error-pages-service.d.ts +64 -57
- package/types/site/error-pages-service.d.ts.map +1 -0
- package/types/site/index.d.ts +10 -9
- package/types/site/index.d.ts.map +1 -0
- package/types/site/models.d.ts +23 -18
- package/types/site/models.d.ts.map +1 -0
- package/types/site/redirects-service.d.ts +92 -69
- package/types/site/redirects-service.d.ts.map +1 -0
- package/types/site/robots-service.d.ts +57 -50
- package/types/site/robots-service.d.ts.map +1 -0
- package/types/site/site-resolver.d.ts +28 -26
- package/types/site/site-resolver.d.ts.map +1 -0
- package/types/site/siteinfo-service.d.ts +65 -52
- package/types/site/siteinfo-service.d.ts.map +1 -0
- package/types/site/sitemap-xml-service.d.ts +63 -56
- package/types/site/sitemap-xml-service.d.ts.map +1 -0
- package/types/site/sitepath-service.d.ts +137 -134
- package/types/site/sitepath-service.d.ts.map +1 -0
- package/types/site/utils.d.ts +41 -28
- package/types/site/utils.d.ts.map +1 -0
- package/types/sitecore-service-base.d.ts +31 -30
- package/types/sitecore-service-base.d.ts.map +1 -0
- package/types/tools/auth/flow.d.ts +29 -27
- package/types/tools/auth/flow.d.ts.map +1 -0
- package/types/tools/auth/index.d.ts +2 -1
- package/types/tools/auth/index.d.ts.map +1 -0
- package/types/tools/auth/models.d.ts +35 -33
- package/types/tools/auth/models.d.ts.map +1 -0
- package/types/tools/auth/tenant-store.d.ts +12 -11
- package/types/tools/auth/tenant-store.d.ts.map +1 -0
- package/types/tools/codegen/component-generation.d.ts +50 -47
- package/types/tools/codegen/component-generation.d.ts.map +1 -0
- package/types/tools/codegen/extract-files.d.ts +24 -22
- package/types/tools/codegen/extract-files.d.ts.map +1 -0
- package/types/tools/codegen/import-map.d.ts +103 -70
- package/types/tools/codegen/import-map.d.ts.map +1 -0
- package/types/tools/codegen/utils.d.ts +76 -75
- package/types/tools/codegen/utils.d.ts.map +1 -0
- package/types/tools/generate-map.d.ts +36 -26
- package/types/tools/generate-map.d.ts.map +1 -0
- package/types/tools/generateMetadata.d.ts +24 -22
- package/types/tools/generateMetadata.d.ts.map +1 -0
- package/types/tools/generateSites.d.ts +25 -22
- package/types/tools/generateSites.d.ts.map +1 -0
- package/types/tools/index.d.ts +22 -20
- package/types/tools/index.d.ts.map +1 -0
- package/types/tools/scaffold.d.ts +27 -25
- package/types/tools/scaffold.d.ts.map +1 -0
- package/types/tools/templating/components.d.ts +104 -103
- package/types/tools/templating/components.d.ts.map +1 -0
- package/types/tools/templating/index.d.ts +4 -3
- package/types/tools/templating/index.d.ts.map +1 -0
- package/types/tools/templating/plugins.d.ts +71 -67
- package/types/tools/templating/plugins.d.ts.map +1 -0
- package/types/tools/templating/utils.d.ts +42 -40
- package/types/tools/templating/utils.d.ts.map +1 -0
- package/types/utils/ensurePath.d.ts +7 -6
- package/types/utils/ensurePath.d.ts.map +1 -0
- package/types/utils/env.d.ts +9 -7
- package/types/utils/env.d.ts.map +1 -0
- package/types/utils/globalCache.d.ts +37 -0
- package/types/utils/globalCache.d.ts.map +1 -0
- package/types/utils/index.d.ts +5 -3
- package/types/utils/index.d.ts.map +1 -0
- package/types/utils/is-server.d.ts +8 -6
- package/types/utils/is-server.d.ts.map +1 -0
- package/types/utils/normalize-url.d.ts +2 -1
- package/types/utils/normalize-url.d.ts.map +1 -0
- package/types/utils/timeout-promise.d.ts +18 -17
- package/types/utils/timeout-promise.d.ts.map +1 -0
- package/types/utils/utils.d.ts +104 -79
- package/types/utils/utils.d.ts.map +1 -0
- package/client.js +0 -1
- package/codegen.js +0 -1
- package/config-cli.js +0 -1
- package/config.js +0 -1
- package/editing.js +0 -1
- package/i18n.js +0 -1
- package/layout.js +0 -1
- package/media.js +0 -1
- package/personalize.js +0 -1
- package/site.js +0 -1
- package/tools.js +0 -1
- 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
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
* @param {
|
|
33
|
-
* @param {
|
|
34
|
-
* @
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
* @param {
|
|
56
|
-
* @param {
|
|
57
|
-
* @
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
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
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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;
|