@sitecore-content-sdk/content 1.5.0-canary.5

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 (258) hide show
  1. package/LICENSE.txt +202 -0
  2. package/README.md +7 -0
  3. package/client.d.ts +1 -0
  4. package/codegen.d.ts +1 -0
  5. package/config-cli.d.ts +1 -0
  6. package/config.d.ts +1 -0
  7. package/dist/cjs/client/edge-proxy.js +24 -0
  8. package/dist/cjs/client/index.js +14 -0
  9. package/dist/cjs/client/models.js +2 -0
  10. package/dist/cjs/client/sitecore-client.js +420 -0
  11. package/dist/cjs/client/utils.js +53 -0
  12. package/dist/cjs/config/define-config.js +195 -0
  13. package/dist/cjs/config/index.js +7 -0
  14. package/dist/cjs/config/models.js +12 -0
  15. package/dist/cjs/config-cli/define-cli-config.js +23 -0
  16. package/dist/cjs/config-cli/index.js +7 -0
  17. package/dist/cjs/config-cli/models.js +8 -0
  18. package/dist/cjs/constants.js +12 -0
  19. package/dist/cjs/debug.js +21 -0
  20. package/dist/cjs/editing/codegen/index.js +14 -0
  21. package/dist/cjs/editing/codegen/preview.js +277 -0
  22. package/dist/cjs/editing/component-layout-service.js +62 -0
  23. package/dist/cjs/editing/design-library.js +184 -0
  24. package/dist/cjs/editing/editing-service.js +81 -0
  25. package/dist/cjs/editing/index.js +33 -0
  26. package/dist/cjs/editing/models.js +44 -0
  27. package/dist/cjs/editing/utils.js +105 -0
  28. package/dist/cjs/form/form.js +81 -0
  29. package/dist/cjs/form/index.js +7 -0
  30. package/dist/cjs/i18n/dictionary-service.js +144 -0
  31. package/dist/cjs/i18n/index.js +7 -0
  32. package/dist/cjs/i18n/utils.js +16 -0
  33. package/dist/cjs/index.js +47 -0
  34. package/dist/cjs/layout/content-styles.js +73 -0
  35. package/dist/cjs/layout/index.js +24 -0
  36. package/dist/cjs/layout/layout-service.js +68 -0
  37. package/dist/cjs/layout/models.js +39 -0
  38. package/dist/cjs/layout/themes.js +77 -0
  39. package/dist/cjs/layout/utils.js +117 -0
  40. package/dist/cjs/media/index.js +38 -0
  41. package/dist/cjs/media/media-api.js +100 -0
  42. package/dist/cjs/models.js +2 -0
  43. package/dist/cjs/personalize/index.js +15 -0
  44. package/dist/cjs/personalize/layout-personalizer.js +98 -0
  45. package/dist/cjs/personalize/personalize-service.js +109 -0
  46. package/dist/cjs/personalize/utils.js +143 -0
  47. package/dist/cjs/site/error-pages-service.js +82 -0
  48. package/dist/cjs/site/index.js +26 -0
  49. package/dist/cjs/site/models.js +2 -0
  50. package/dist/cjs/site/redirects-service.js +109 -0
  51. package/dist/cjs/site/robots-service.js +74 -0
  52. package/dist/cjs/site/site-resolver.js +73 -0
  53. package/dist/cjs/site/siteinfo-service.js +94 -0
  54. package/dist/cjs/site/sitemap-xml-service.js +92 -0
  55. package/dist/cjs/site/sitepath-service.js +201 -0
  56. package/dist/cjs/site/utils.js +55 -0
  57. package/dist/cjs/sitecore-service-base.js +33 -0
  58. package/dist/cjs/tools/codegen/component-generation.js +49 -0
  59. package/dist/cjs/tools/codegen/extract-files.js +105 -0
  60. package/dist/cjs/tools/codegen/import-map.js +411 -0
  61. package/dist/cjs/tools/codegen/utils.js +418 -0
  62. package/dist/cjs/tools/generate-map.js +2 -0
  63. package/dist/cjs/tools/generateSites.js +59 -0
  64. package/dist/cjs/tools/index.js +30 -0
  65. package/dist/cjs/tools/scaffold.js +62 -0
  66. package/dist/cjs/tools/templating/components.js +96 -0
  67. package/dist/cjs/tools/templating/index.js +6 -0
  68. package/dist/esm/client/edge-proxy.js +19 -0
  69. package/dist/esm/client/index.js +4 -0
  70. package/dist/esm/client/models.js +1 -0
  71. package/dist/esm/client/sitecore-client.js +416 -0
  72. package/dist/esm/client/utils.js +49 -0
  73. package/dist/esm/config/define-config.js +189 -0
  74. package/dist/esm/config/index.js +2 -0
  75. package/dist/esm/config/models.js +9 -0
  76. package/dist/esm/config-cli/define-cli-config.js +19 -0
  77. package/dist/esm/config-cli/index.js +2 -0
  78. package/dist/esm/config-cli/models.js +5 -0
  79. package/dist/esm/constants.js +9 -0
  80. package/dist/esm/debug.js +19 -0
  81. package/dist/esm/editing/codegen/index.js +1 -0
  82. package/dist/esm/editing/codegen/preview.js +263 -0
  83. package/dist/esm/editing/component-layout-service.js +55 -0
  84. package/dist/esm/editing/design-library.js +172 -0
  85. package/dist/esm/editing/editing-service.js +74 -0
  86. package/dist/esm/editing/index.js +6 -0
  87. package/dist/esm/editing/models.js +41 -0
  88. package/dist/esm/editing/utils.js +98 -0
  89. package/dist/esm/form/form.js +72 -0
  90. package/dist/esm/form/index.js +1 -0
  91. package/dist/esm/i18n/dictionary-service.js +137 -0
  92. package/dist/esm/i18n/index.js +2 -0
  93. package/dist/esm/i18n/utils.js +13 -0
  94. package/dist/esm/index.js +5 -0
  95. package/dist/esm/layout/content-styles.js +65 -0
  96. package/dist/esm/layout/index.js +6 -0
  97. package/dist/esm/layout/layout-service.js +61 -0
  98. package/dist/esm/layout/models.js +36 -0
  99. package/dist/esm/layout/themes.js +72 -0
  100. package/dist/esm/layout/utils.js +109 -0
  101. package/dist/esm/media/index.js +2 -0
  102. package/dist/esm/media/media-api.js +90 -0
  103. package/dist/esm/models.js +1 -0
  104. package/dist/esm/personalize/index.js +3 -0
  105. package/dist/esm/personalize/layout-personalizer.js +93 -0
  106. package/dist/esm/personalize/personalize-service.js +102 -0
  107. package/dist/esm/personalize/utils.js +135 -0
  108. package/dist/esm/site/error-pages-service.js +75 -0
  109. package/dist/esm/site/index.js +8 -0
  110. package/dist/esm/site/models.js +1 -0
  111. package/dist/esm/site/redirects-service.js +102 -0
  112. package/dist/esm/site/robots-service.js +67 -0
  113. package/dist/esm/site/site-resolver.js +69 -0
  114. package/dist/esm/site/siteinfo-service.js +87 -0
  115. package/dist/esm/site/sitemap-xml-service.js +85 -0
  116. package/dist/esm/site/sitepath-service.js +193 -0
  117. package/dist/esm/site/utils.js +49 -0
  118. package/dist/esm/sitecore-service-base.js +29 -0
  119. package/dist/esm/tools/codegen/component-generation.js +44 -0
  120. package/dist/esm/tools/codegen/extract-files.js +99 -0
  121. package/dist/esm/tools/codegen/import-map.js +368 -0
  122. package/dist/esm/tools/codegen/utils.js +373 -0
  123. package/dist/esm/tools/generate-map.js +1 -0
  124. package/dist/esm/tools/generateSites.js +52 -0
  125. package/dist/esm/tools/index.js +6 -0
  126. package/dist/esm/tools/scaffold.js +54 -0
  127. package/dist/esm/tools/templating/components.js +59 -0
  128. package/dist/esm/tools/templating/index.js +1 -0
  129. package/editing.d.ts +1 -0
  130. package/i18n.d.ts +1 -0
  131. package/layout.d.ts +1 -0
  132. package/media.d.ts +1 -0
  133. package/package.json +157 -0
  134. package/personalize.d.ts +1 -0
  135. package/site.d.ts +1 -0
  136. package/tools.d.ts +1 -0
  137. package/types/client/edge-proxy.d.ts +17 -0
  138. package/types/client/edge-proxy.d.ts.map +1 -0
  139. package/types/client/index.d.ts +7 -0
  140. package/types/client/index.d.ts.map +1 -0
  141. package/types/client/models.d.ts +21 -0
  142. package/types/client/models.d.ts.map +1 -0
  143. package/types/client/sitecore-client.d.ts +338 -0
  144. package/types/client/sitecore-client.d.ts.map +1 -0
  145. package/types/client/utils.d.ts +15 -0
  146. package/types/client/utils.d.ts.map +1 -0
  147. package/types/config/define-config.d.ts +20 -0
  148. package/types/config/define-config.d.ts.map +1 -0
  149. package/types/config/index.d.ts +3 -0
  150. package/types/config/index.d.ts.map +1 -0
  151. package/types/config/models.d.ts +287 -0
  152. package/types/config/models.d.ts.map +1 -0
  153. package/types/config-cli/define-cli-config.d.ts +9 -0
  154. package/types/config-cli/define-cli-config.d.ts.map +1 -0
  155. package/types/config-cli/index.d.ts +3 -0
  156. package/types/config-cli/index.d.ts.map +1 -0
  157. package/types/config-cli/models.d.ts +6 -0
  158. package/types/config-cli/models.d.ts.map +1 -0
  159. package/types/constants.d.ts +10 -0
  160. package/types/constants.d.ts.map +1 -0
  161. package/types/debug.d.ts +19 -0
  162. package/types/debug.d.ts.map +1 -0
  163. package/types/editing/codegen/index.d.ts +2 -0
  164. package/types/editing/codegen/index.d.ts.map +1 -0
  165. package/types/editing/codegen/preview.d.ts +256 -0
  166. package/types/editing/codegen/preview.d.ts.map +1 -0
  167. package/types/editing/component-layout-service.d.ts +84 -0
  168. package/types/editing/component-layout-service.d.ts.map +1 -0
  169. package/types/editing/design-library.d.ts +111 -0
  170. package/types/editing/design-library.d.ts.map +1 -0
  171. package/types/editing/editing-service.d.ts +71 -0
  172. package/types/editing/editing-service.d.ts.map +1 -0
  173. package/types/editing/index.d.ts +7 -0
  174. package/types/editing/index.d.ts.map +1 -0
  175. package/types/editing/models.d.ts +103 -0
  176. package/types/editing/models.d.ts.map +1 -0
  177. package/types/editing/utils.d.ts +82 -0
  178. package/types/editing/utils.d.ts.map +1 -0
  179. package/types/form/form.d.ts +25 -0
  180. package/types/form/form.d.ts.map +1 -0
  181. package/types/form/index.d.ts +2 -0
  182. package/types/form/index.d.ts.map +1 -0
  183. package/types/i18n/dictionary-service.d.ts +133 -0
  184. package/types/i18n/dictionary-service.d.ts.map +1 -0
  185. package/types/i18n/index.d.ts +3 -0
  186. package/types/i18n/index.d.ts.map +1 -0
  187. package/types/i18n/utils.d.ts +9 -0
  188. package/types/i18n/utils.d.ts.map +1 -0
  189. package/types/index.d.ts +7 -0
  190. package/types/index.d.ts.map +1 -0
  191. package/types/layout/content-styles.d.ts +20 -0
  192. package/types/layout/content-styles.d.ts.map +1 -0
  193. package/types/layout/index.d.ts +6 -0
  194. package/types/layout/index.d.ts.map +1 -0
  195. package/types/layout/layout-service.d.ts +45 -0
  196. package/types/layout/layout-service.d.ts.map +1 -0
  197. package/types/layout/models.d.ts +174 -0
  198. package/types/layout/models.d.ts.map +1 -0
  199. package/types/layout/themes.d.ts +13 -0
  200. package/types/layout/themes.d.ts.map +1 -0
  201. package/types/layout/utils.d.ts +56 -0
  202. package/types/layout/utils.d.ts.map +1 -0
  203. package/types/media/index.d.ts +3 -0
  204. package/types/media/index.d.ts.map +1 -0
  205. package/types/media/media-api.d.ts +60 -0
  206. package/types/media/media-api.d.ts.map +1 -0
  207. package/types/models.d.ts +32 -0
  208. package/types/models.d.ts.map +1 -0
  209. package/types/personalize/index.d.ts +4 -0
  210. package/types/personalize/index.d.ts.map +1 -0
  211. package/types/personalize/layout-personalizer.d.ts +29 -0
  212. package/types/personalize/layout-personalizer.d.ts.map +1 -0
  213. package/types/personalize/personalize-service.d.ts +89 -0
  214. package/types/personalize/personalize-service.d.ts.map +1 -0
  215. package/types/personalize/utils.d.ts +78 -0
  216. package/types/personalize/utils.d.ts.map +1 -0
  217. package/types/site/error-pages-service.d.ts +64 -0
  218. package/types/site/error-pages-service.d.ts.map +1 -0
  219. package/types/site/index.d.ts +10 -0
  220. package/types/site/index.d.ts.map +1 -0
  221. package/types/site/models.d.ts +23 -0
  222. package/types/site/models.d.ts.map +1 -0
  223. package/types/site/redirects-service.d.ts +91 -0
  224. package/types/site/redirects-service.d.ts.map +1 -0
  225. package/types/site/robots-service.d.ts +57 -0
  226. package/types/site/robots-service.d.ts.map +1 -0
  227. package/types/site/site-resolver.d.ts +28 -0
  228. package/types/site/site-resolver.d.ts.map +1 -0
  229. package/types/site/siteinfo-service.d.ts +64 -0
  230. package/types/site/siteinfo-service.d.ts.map +1 -0
  231. package/types/site/sitemap-xml-service.d.ts +63 -0
  232. package/types/site/sitemap-xml-service.d.ts.map +1 -0
  233. package/types/site/sitepath-service.d.ts +137 -0
  234. package/types/site/sitepath-service.d.ts.map +1 -0
  235. package/types/site/utils.d.ts +41 -0
  236. package/types/site/utils.d.ts.map +1 -0
  237. package/types/sitecore-service-base.d.ts +31 -0
  238. package/types/sitecore-service-base.d.ts.map +1 -0
  239. package/types/tools/codegen/component-generation.d.ts +50 -0
  240. package/types/tools/codegen/component-generation.d.ts.map +1 -0
  241. package/types/tools/codegen/extract-files.d.ts +24 -0
  242. package/types/tools/codegen/extract-files.d.ts.map +1 -0
  243. package/types/tools/codegen/import-map.d.ts +103 -0
  244. package/types/tools/codegen/import-map.d.ts.map +1 -0
  245. package/types/tools/codegen/utils.d.ts +76 -0
  246. package/types/tools/codegen/utils.d.ts.map +1 -0
  247. package/types/tools/generate-map.d.ts +36 -0
  248. package/types/tools/generate-map.d.ts.map +1 -0
  249. package/types/tools/generateSites.d.ts +25 -0
  250. package/types/tools/generateSites.d.ts.map +1 -0
  251. package/types/tools/index.d.ts +8 -0
  252. package/types/tools/index.d.ts.map +1 -0
  253. package/types/tools/scaffold.d.ts +27 -0
  254. package/types/tools/scaffold.d.ts.map +1 -0
  255. package/types/tools/templating/components.d.ts +104 -0
  256. package/types/tools/templating/components.d.ts.map +1 -0
  257. package/types/tools/templating/index.d.ts +2 -0
  258. package/types/tools/templating/index.d.ts.map +1 -0
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getDesignLibraryStylesheetLinks = exports.GRAPHQL_LAYOUT_QUERY_NAME = exports.LayoutService = exports.getContentStylesheetLink = exports.EMPTY_DATE_FIELD_VALUE = exports.getDynamicPlaceholderPattern = exports.isDynamicPlaceholder = exports.isFieldValueEmpty = exports.getChildPlaceholder = exports.getFieldValue = exports.EDITING_COMPONENT_ID = exports.EDITING_COMPONENT_PLACEHOLDER = exports.RenderingType = exports.EditMode = exports.LayoutServicePageState = void 0;
4
+ // layout
5
+ var models_1 = require("./models");
6
+ Object.defineProperty(exports, "LayoutServicePageState", { enumerable: true, get: function () { return models_1.LayoutServicePageState; } });
7
+ Object.defineProperty(exports, "EditMode", { enumerable: true, get: function () { return models_1.EditMode; } });
8
+ Object.defineProperty(exports, "RenderingType", { enumerable: true, get: function () { return models_1.RenderingType; } });
9
+ Object.defineProperty(exports, "EDITING_COMPONENT_PLACEHOLDER", { enumerable: true, get: function () { return models_1.EDITING_COMPONENT_PLACEHOLDER; } });
10
+ Object.defineProperty(exports, "EDITING_COMPONENT_ID", { enumerable: true, get: function () { return models_1.EDITING_COMPONENT_ID; } });
11
+ var utils_1 = require("./utils");
12
+ Object.defineProperty(exports, "getFieldValue", { enumerable: true, get: function () { return utils_1.getFieldValue; } });
13
+ Object.defineProperty(exports, "getChildPlaceholder", { enumerable: true, get: function () { return utils_1.getChildPlaceholder; } });
14
+ Object.defineProperty(exports, "isFieldValueEmpty", { enumerable: true, get: function () { return utils_1.isFieldValueEmpty; } });
15
+ Object.defineProperty(exports, "isDynamicPlaceholder", { enumerable: true, get: function () { return utils_1.isDynamicPlaceholder; } });
16
+ Object.defineProperty(exports, "getDynamicPlaceholderPattern", { enumerable: true, get: function () { return utils_1.getDynamicPlaceholderPattern; } });
17
+ Object.defineProperty(exports, "EMPTY_DATE_FIELD_VALUE", { enumerable: true, get: function () { return utils_1.EMPTY_DATE_FIELD_VALUE; } });
18
+ var content_styles_1 = require("./content-styles");
19
+ Object.defineProperty(exports, "getContentStylesheetLink", { enumerable: true, get: function () { return content_styles_1.getContentStylesheetLink; } });
20
+ var layout_service_1 = require("./layout-service");
21
+ Object.defineProperty(exports, "LayoutService", { enumerable: true, get: function () { return layout_service_1.LayoutService; } });
22
+ Object.defineProperty(exports, "GRAPHQL_LAYOUT_QUERY_NAME", { enumerable: true, get: function () { return layout_service_1.GRAPHQL_LAYOUT_QUERY_NAME; } });
23
+ var themes_1 = require("./themes");
24
+ Object.defineProperty(exports, "getDesignLibraryStylesheetLinks", { enumerable: true, get: function () { return themes_1.getDesignLibraryStylesheetLinks; } });
@@ -0,0 +1,68 @@
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.LayoutService = exports.GRAPHQL_LAYOUT_QUERY_NAME = void 0;
7
+ const sitecore_service_base_1 = require("../sitecore-service-base");
8
+ const debug_1 = __importDefault(require("../debug"));
9
+ /**
10
+ * GraphQL layout query name
11
+ * @internal
12
+ */
13
+ exports.GRAPHQL_LAYOUT_QUERY_NAME = 'ContentSdkLayoutQuery';
14
+ /**
15
+ * Service that fetch layout data using Sitecore's GraphQL API.
16
+ * @augments LayoutServiceBase
17
+ * @mixes GraphQLRequestClient
18
+ * @public
19
+ */
20
+ class LayoutService extends sitecore_service_base_1.SitecoreServiceBase {
21
+ /**
22
+ * Fetch layout data using the Sitecore GraphQL endpoint.
23
+ * @param {LayoutServiceConfig} serviceConfig configuration
24
+ */
25
+ constructor(serviceConfig) {
26
+ super(serviceConfig);
27
+ this.serviceConfig = serviceConfig;
28
+ }
29
+ /**
30
+ * Fetch layout data for an item.
31
+ * @param {string} itemPath item path to fetch layout data for.
32
+ * @param {RouteOptions} [routeOptions] Request options like language and site to retrieve data for
33
+ * @param {FetchOptions} [fetchOptions] Options to override graphQL client details like retries and fetch implementation
34
+ * @returns {Promise<LayoutServiceData>} layout service data
35
+ */
36
+ async fetchLayoutData(itemPath, routeOptions, fetchOptions) {
37
+ var _a, _b;
38
+ const site = routeOptions.site;
39
+ const query = this.getLayoutQuery(itemPath, site, routeOptions === null || routeOptions === void 0 ? void 0 : routeOptions.locale);
40
+ debug_1.default.layout('fetching layout data for %s %s %s', itemPath, routeOptions === null || routeOptions === void 0 ? void 0 : routeOptions.locale, site);
41
+ const data = await this.graphQLClient.request(query, {}, fetchOptions);
42
+ // If `rendered` is empty -> not found
43
+ return (((_b = (_a = data === null || data === void 0 ? void 0 : data.layout) === null || _a === void 0 ? void 0 : _a.item) === null || _b === void 0 ? void 0 : _b.rendered) || {
44
+ sitecore: { context: { pageEditing: false, language: routeOptions === null || routeOptions === void 0 ? void 0 : routeOptions.locale }, route: null },
45
+ });
46
+ }
47
+ /**
48
+ * Returns GraphQL Layout query
49
+ * @param {string} itemPath page route
50
+ * @param {string} [site] site name
51
+ * @param {string} [language] language
52
+ * @returns {string} GraphQL query
53
+ */
54
+ getLayoutQuery(itemPath, site, language) {
55
+ const languageVariable = language ? `, language:"${language}"` : '';
56
+ const layoutQuery = this.serviceConfig.formatLayoutQuery
57
+ ? this.serviceConfig.formatLayoutQuery(site, itemPath, language)
58
+ : `layout(site:"${site}", routePath:"${itemPath}"${languageVariable})`;
59
+ return `query ${exports.GRAPHQL_LAYOUT_QUERY_NAME} {
60
+ ${layoutQuery}{
61
+ item {
62
+ rendered
63
+ }
64
+ }
65
+ }`;
66
+ }
67
+ }
68
+ exports.LayoutService = LayoutService;
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EDITING_COMPONENT_ID = exports.EDITING_COMPONENT_PLACEHOLDER = exports.RenderingType = exports.EditMode = exports.LayoutServicePageState = void 0;
4
+ /**
5
+ * Layout Service page state enum
6
+ * @public
7
+ */
8
+ var LayoutServicePageState;
9
+ (function (LayoutServicePageState) {
10
+ LayoutServicePageState["Preview"] = "preview";
11
+ LayoutServicePageState["Edit"] = "edit";
12
+ LayoutServicePageState["Normal"] = "normal";
13
+ })(LayoutServicePageState || (exports.LayoutServicePageState = LayoutServicePageState = {}));
14
+ /**
15
+ * Represents the edit mode for rendering content in Sitecore Editors
16
+ * @public
17
+ */
18
+ var EditMode;
19
+ (function (EditMode) {
20
+ EditMode["Metadata"] = "metadata";
21
+ })(EditMode || (exports.EditMode = EditMode = {}));
22
+ /**
23
+ * Editing rendering type
24
+ * @public
25
+ */
26
+ var RenderingType;
27
+ (function (RenderingType) {
28
+ RenderingType["Component"] = "component";
29
+ })(RenderingType || (exports.RenderingType = RenderingType = {}));
30
+ /**
31
+ * Static placeholder name used for component rendering
32
+ * @internal
33
+ */
34
+ exports.EDITING_COMPONENT_PLACEHOLDER = 'editing-componentmode-placeholder';
35
+ /**
36
+ * Id of wrapper for component rendering
37
+ * @internal
38
+ */
39
+ exports.EDITING_COMPONENT_ID = 'editing-component';
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getStylesheetUrl = void 0;
4
+ exports.getDesignLibraryStylesheetLinks = getDesignLibraryStylesheetLinks;
5
+ const tools_1 = require("@sitecore-content-sdk/core/tools");
6
+ const core_1 = require("@sitecore-content-sdk/core");
7
+ const _1 = require(".");
8
+ const { SITECORE_EDGE_URL_DEFAULT } = core_1.constants;
9
+ /**
10
+ * Pattern for library ids
11
+ * @example -library--foo
12
+ */
13
+ const STYLES_LIBRARY_ID_REGEX = /-library--([^\s]+)/;
14
+ /**
15
+ * Walks through rendering tree and returns list of links of all FEAAS, BYOC or SXA Design Library Stylesheets that are used
16
+ * @param {LayoutServiceData} layoutData Layout service data
17
+ * @param {string} sitecoreEdgeContextId Sitecore Edge Context ID
18
+ * @param {string} [sitecoreEdgeUrl] Sitecore Edge Platform URL. Default is https://edge-platform.sitecorecloud.io
19
+ * @returns {HTMLLink[]} library stylesheet links
20
+ * @public
21
+ */
22
+ function getDesignLibraryStylesheetLinks(layoutData, sitecoreEdgeContextId, sitecoreEdgeUrl = SITECORE_EDGE_URL_DEFAULT) {
23
+ const ids = new Set();
24
+ if (!layoutData.sitecore.route)
25
+ return [];
26
+ traverseComponent(layoutData.sitecore.route, ids);
27
+ return [...ids].map((id) => ({
28
+ href: (0, exports.getStylesheetUrl)(id, sitecoreEdgeContextId, sitecoreEdgeUrl),
29
+ rel: 'stylesheet',
30
+ }));
31
+ }
32
+ const getStylesheetUrl = (id, sitecoreEdgeContextId, sitecoreEdgeUrl = SITECORE_EDGE_URL_DEFAULT) => {
33
+ return `${(0, tools_1.normalizeUrl)(sitecoreEdgeUrl)}/v1/files/components/styles/${id}.css?sitecoreContextId=${sitecoreEdgeContextId}`;
34
+ };
35
+ exports.getStylesheetUrl = getStylesheetUrl;
36
+ /**
37
+ * Traverse placeholder and components to add library ids
38
+ * @param {ComponentRendering[]} components
39
+ * @param {Set<string>} ids library ids
40
+ */
41
+ const traversePlaceholder = (components, ids) => {
42
+ components.map((component) => {
43
+ return traverseComponent(component, ids);
44
+ });
45
+ };
46
+ /**
47
+ * Traverse component and children to add library ids
48
+ * @param {RouteData | ComponentRendering | HtmlElementRendering} component component data
49
+ * @param {Set<string>} ids library ids
50
+ */
51
+ const traverseComponent = (component, ids) => {
52
+ var _a, _b, _c, _d, _e, _f;
53
+ let libraryId = undefined;
54
+ if ('params' in component && component.params) {
55
+ // LibraryID in css class name takes precedence over LibraryId attribute
56
+ libraryId =
57
+ ((_b = (_a = component.params.CSSStyles) === null || _a === void 0 ? void 0 : _a.match(STYLES_LIBRARY_ID_REGEX)) === null || _b === void 0 ? void 0 : _b[1]) ||
58
+ ((_d = (_c = component.params.Styles) === null || _c === void 0 ? void 0 : _c.match(STYLES_LIBRARY_ID_REGEX)) === null || _d === void 0 ? void 0 : _d[1]) ||
59
+ component.params.LibraryId ||
60
+ undefined;
61
+ }
62
+ // if params are empty we try to fall back to data source
63
+ if (!libraryId && 'fields' in component && component.fields) {
64
+ libraryId =
65
+ ((_e = (0, _1.getFieldValue)(component.fields, 'CSSStyles', '').match(STYLES_LIBRARY_ID_REGEX)) === null || _e === void 0 ? void 0 : _e[1]) ||
66
+ ((_f = (0, _1.getFieldValue)(component.fields, 'Styles', '').match(STYLES_LIBRARY_ID_REGEX)) === null || _f === void 0 ? void 0 : _f[1]) ||
67
+ (0, _1.getFieldValue)(component.fields, 'LibraryId', '') ||
68
+ undefined;
69
+ }
70
+ if (libraryId) {
71
+ ids.add(libraryId);
72
+ }
73
+ const placeholders = component.placeholders || {};
74
+ Object.keys(placeholders).forEach((placeholder) => {
75
+ traversePlaceholder(placeholders[placeholder], ids);
76
+ });
77
+ };
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EMPTY_DATE_FIELD_VALUE = exports.isDynamicPlaceholder = exports.getDynamicPlaceholderPattern = void 0;
4
+ exports.getFieldValue = getFieldValue;
5
+ exports.getChildPlaceholder = getChildPlaceholder;
6
+ exports.isFieldValueEmpty = isFieldValueEmpty;
7
+ /**
8
+ * @param {ComponentRendering | Fields} renderingOrFields the rendering or fields object to extract the field from
9
+ * @param {string} fieldName the name of the field to extract
10
+ * @param {T} [defaultValue] the default value to return if the field is not defined
11
+ * @returns {Field | T} the field value or the default value if the field is not defined
12
+ * @public
13
+ */
14
+ // eslint-disable-next-line no-redeclare
15
+ function getFieldValue(renderingOrFields, fieldName, defaultValue) {
16
+ if (!renderingOrFields || !fieldName) {
17
+ return defaultValue;
18
+ }
19
+ const fields = renderingOrFields;
20
+ const field = fields[fieldName];
21
+ if (field && typeof field.value !== 'undefined') {
22
+ return field.value;
23
+ }
24
+ const rendering = renderingOrFields;
25
+ if (!rendering.fields ||
26
+ !rendering.fields[fieldName] ||
27
+ typeof rendering.fields[fieldName].value === 'undefined') {
28
+ return defaultValue;
29
+ }
30
+ return rendering.fields[fieldName].value;
31
+ }
32
+ /**
33
+ * Gets rendering definitions in a given child placeholder under a current rendering.
34
+ * @param {ComponentRendering} rendering
35
+ * @param {string} placeholderName
36
+ * @returns {ComponentRendering[]} child placeholder
37
+ * @public
38
+ */
39
+ function getChildPlaceholder(rendering, placeholderName) {
40
+ if (!rendering ||
41
+ !placeholderName ||
42
+ !rendering.placeholders ||
43
+ !rendering.placeholders[placeholderName]) {
44
+ return [];
45
+ }
46
+ return rendering.placeholders[placeholderName];
47
+ }
48
+ /**
49
+ * Returns a regular expression pattern for a dynamic placeholder name.
50
+ * @param {string} placeholder Placeholder name with a dynamic segment (e.g. 'main-{*}')
51
+ * @returns Regular expression pattern for the dynamic segment
52
+ * @internal
53
+ */
54
+ const getDynamicPlaceholderPattern = (placeholder) => {
55
+ return new RegExp(`^${placeholder.replace(/\{\*\}+/i, '\\d+')}$`);
56
+ };
57
+ exports.getDynamicPlaceholderPattern = getDynamicPlaceholderPattern;
58
+ /**
59
+ * Checks if the placeholder name is dynamic.
60
+ * @param {string} placeholder Placeholder name
61
+ * @returns True if the placeholder name is dynamic
62
+ * @internal
63
+ */
64
+ const isDynamicPlaceholder = (placeholder) => placeholder.indexOf('{*}') !== -1;
65
+ exports.isDynamicPlaceholder = isDynamicPlaceholder;
66
+ /**
67
+ * The default value for an empty Date field.
68
+ * This value is defined as a default one by .NET
69
+ * @internal
70
+ */
71
+ exports.EMPTY_DATE_FIELD_VALUE = '0001-01-01T00:00:00Z';
72
+ /**
73
+ * Determines if the passed in field object's value is empty.
74
+ * @param {GenericFieldValue | Partial<Field>} field the field object.
75
+ * Partial<T> type is used here because _field.value_ could be required or optional for the different field types
76
+ * @returns True if the field value is empty
77
+ * @public
78
+ */
79
+ function isFieldValueEmpty(field) {
80
+ if (!field)
81
+ return true;
82
+ const isImageFieldEmpty = (fieldValue) => !fieldValue.src;
83
+ const isFileFieldEmpty = (fieldValue) => !fieldValue.src;
84
+ const isLinkFieldEmpty = (fieldValue) => !fieldValue.href;
85
+ const isDateFieldEmpty = (fieldValue) => {
86
+ if (typeof fieldValue === 'string') {
87
+ return fieldValue === exports.EMPTY_DATE_FIELD_VALUE;
88
+ }
89
+ else {
90
+ return !(typeof (fieldValue === null || fieldValue === void 0 ? void 0 : fieldValue.getMonth) === 'function' &&
91
+ !isNaN(fieldValue === null || fieldValue === void 0 ? void 0 : fieldValue.getMonth()));
92
+ }
93
+ };
94
+ const isEmpty = (fieldValue) => {
95
+ if (fieldValue === null || fieldValue === undefined) {
96
+ return true;
97
+ }
98
+ if (typeof fieldValue === 'object') {
99
+ return (isImageFieldEmpty(fieldValue) &&
100
+ isFileFieldEmpty(fieldValue) &&
101
+ isLinkFieldEmpty(fieldValue) &&
102
+ isDateFieldEmpty(fieldValue));
103
+ }
104
+ else if (typeof fieldValue === 'number' || typeof fieldValue === 'boolean') {
105
+ // Avoid returning true for 0 and false values
106
+ return false;
107
+ }
108
+ else {
109
+ return !fieldValue || isDateFieldEmpty(fieldValue);
110
+ }
111
+ };
112
+ const dynamicField = field;
113
+ if (dynamicField.value !== undefined) {
114
+ return isEmpty(dynamicField.value);
115
+ }
116
+ return isEmpty(field);
117
+ }
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.mediaApi = void 0;
37
+ const mediaApi = __importStar(require("./media-api"));
38
+ exports.mediaApi = mediaApi;
@@ -0,0 +1,100 @@
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.getSrcSet = exports.updateImageUrl = exports.replaceMediaUrlPrefix = exports.getRequiredParams = void 0;
7
+ const url_parse_1 = __importDefault(require("url-parse"));
8
+ // finds the Sitecore media URL prefix
9
+ const mediaUrlPrefixRegex = /\/([-~]{1})\/media\//i;
10
+ /**
11
+ * Get required query string params which should be merged with user params
12
+ * @param {object} qs layout service parsed query string
13
+ * @returns {object} requiredParams
14
+ * @public
15
+ */
16
+ const getRequiredParams = (qs) => {
17
+ const { rev, db, la, vs, ts } = qs;
18
+ return { rev, db, la, vs, ts };
19
+ };
20
+ exports.getRequiredParams = getRequiredParams;
21
+ /**
22
+ * Replace `/~/media` or `/-/media` with `/~/jssmedia` or `/-/jssmedia`, respectively.
23
+ * Can use `mediaUrlPrefix` in order to use a custom prefix.
24
+ * @param {string} url The URL to replace the media URL prefix in
25
+ * @param {RegExp} [mediaUrlPrefix] The regex to match the media URL prefix
26
+ * @returns {string} The URL with the media URL prefix replaced
27
+ * @public
28
+ */
29
+ const replaceMediaUrlPrefix = (url, mediaUrlPrefix = mediaUrlPrefixRegex) => {
30
+ const parsed = (0, url_parse_1.default)(url, {}, true);
31
+ const match = mediaUrlPrefix.exec(parsed.pathname);
32
+ if (match && match.length > 1) {
33
+ // regex will provide us with /-/ or /~/ type
34
+ parsed.set('pathname', parsed.pathname.replace(mediaUrlPrefix, `/${match[1]}/jssmedia/`));
35
+ }
36
+ return parsed.toString();
37
+ };
38
+ exports.replaceMediaUrlPrefix = replaceMediaUrlPrefix;
39
+ /**
40
+ * Prepares a Sitecore media URL with `params` for use by the Content SDK media handler.
41
+ * This is done by replacing `/~/media` or `/-/media` with `/~/jssmedia` or `/-/jssmedia`, respectively.
42
+ * Provided `params` are used as the querystring parameters for the media URL.
43
+ * Can use `mediaUrlPrefix` in order to use a custom prefix.
44
+ * If no `params` are sent, the original media URL is returned.
45
+ * @param {string} url The URL to prepare
46
+ * @param {object} [params] The querystring parameters to use
47
+ * @param {RegExp} [mediaUrlPrefix] The regex to match the media URL prefix
48
+ * @returns {string} The prepared URL
49
+ * @public
50
+ */
51
+ const updateImageUrl = (url, params, mediaUrlPrefix = mediaUrlPrefixRegex) => {
52
+ if (!params || Object.keys(params).length === 0) {
53
+ // if params aren't supplied, no need to run it through Content SDK media handler
54
+ return url;
55
+ }
56
+ // polyfill node `global` in browser to workaround https://github.com/unshiftio/url-parse/issues/150
57
+ if (typeof window !== 'undefined' && !window.global) {
58
+ window.global = {};
59
+ }
60
+ const parsed = (0, url_parse_1.default)((0, exports.replaceMediaUrlPrefix)(url, mediaUrlPrefix), {}, true);
61
+ const requiredParams = (0, exports.getRequiredParams)(parsed.query);
62
+ const query = Object.assign({}, params);
63
+ Object.entries(requiredParams).forEach(([key, param]) => {
64
+ if (param) {
65
+ query[key] = param;
66
+ }
67
+ });
68
+ parsed.set('query', query);
69
+ return parsed.toString();
70
+ };
71
+ exports.updateImageUrl = updateImageUrl;
72
+ /**
73
+ * Receives an array of `srcSet` parameters that are iterated and used as parameters to generate
74
+ * a corresponding set of updated Sitecore media URLs via @see updateImageUrl. The result is a comma-delimited
75
+ * list of media URLs with respective dimension parameters.
76
+ * @example
77
+ * // returns '/ipsum.jpg?h=1000&w=1000 1000w, /ipsum.jpg?mh=250&mw=250 250w'
78
+ * getSrcSet('/ipsum.jpg', [{ h: 1000, w: 1000 }, { mh: 250, mw: 250 } ])
79
+ * More information about `srcSet`: {@link https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img}
80
+ * @param {string} url The URL to prepare
81
+ * @param {Array} srcSet The array of parameters to use
82
+ * @param {object} [imageParams] The querystring parameters to use
83
+ * @param {RegExp} [mediaUrlPrefix] The regex to match the media URL prefix
84
+ * @returns {string} The prepared URL
85
+ * @public
86
+ */
87
+ const getSrcSet = (url, srcSet, imageParams, mediaUrlPrefix) => {
88
+ return srcSet
89
+ .map((params) => {
90
+ const newParams = Object.assign(Object.assign({}, imageParams), params);
91
+ const imageWidth = newParams.w || newParams.mw;
92
+ if (!imageWidth) {
93
+ return null;
94
+ }
95
+ return `${(0, exports.updateImageUrl)(url, newParams, mediaUrlPrefix)} ${imageWidth}w`;
96
+ })
97
+ .filter((value) => value)
98
+ .join(', ');
99
+ };
100
+ exports.getSrcSet = getSrcSet;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VARIANT_PREFIX = exports.DEFAULT_VARIANT = exports.CdpHelper = exports.normalizePersonalizedRewrite = exports.getGroomedVariantIds = exports.getPersonalizedRewriteData = exports.getPersonalizedRewrite = exports.PersonalizeService = exports.personalizeLayout = void 0;
4
+ var layout_personalizer_1 = require("./layout-personalizer");
5
+ Object.defineProperty(exports, "personalizeLayout", { enumerable: true, get: function () { return layout_personalizer_1.personalizeLayout; } });
6
+ var personalize_service_1 = require("./personalize-service");
7
+ Object.defineProperty(exports, "PersonalizeService", { enumerable: true, get: function () { return personalize_service_1.PersonalizeService; } });
8
+ var utils_1 = require("./utils");
9
+ Object.defineProperty(exports, "getPersonalizedRewrite", { enumerable: true, get: function () { return utils_1.getPersonalizedRewrite; } });
10
+ Object.defineProperty(exports, "getPersonalizedRewriteData", { enumerable: true, get: function () { return utils_1.getPersonalizedRewriteData; } });
11
+ Object.defineProperty(exports, "getGroomedVariantIds", { enumerable: true, get: function () { return utils_1.getGroomedVariantIds; } });
12
+ Object.defineProperty(exports, "normalizePersonalizedRewrite", { enumerable: true, get: function () { return utils_1.normalizePersonalizedRewrite; } });
13
+ Object.defineProperty(exports, "CdpHelper", { enumerable: true, get: function () { return utils_1.CdpHelper; } });
14
+ Object.defineProperty(exports, "DEFAULT_VARIANT", { enumerable: true, get: function () { return utils_1.DEFAULT_VARIANT; } });
15
+ Object.defineProperty(exports, "VARIANT_PREFIX", { enumerable: true, get: function () { return utils_1.VARIANT_PREFIX; } });
@@ -0,0 +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
+ * @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
+ }