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

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 (262) 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 +29 -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 +443 -0
  11. package/dist/cjs/client/utils.js +53 -0
  12. package/dist/cjs/config/define-config.js +200 -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 +15 -0
  21. package/dist/cjs/editing/codegen/preview.js +305 -0
  22. package/dist/cjs/editing/component-layout-service.js +63 -0
  23. package/dist/cjs/editing/design-library.js +191 -0
  24. package/dist/cjs/editing/editing-service.js +82 -0
  25. package/dist/cjs/editing/index.js +34 -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 +72 -0
  35. package/dist/cjs/layout/index.js +29 -0
  36. package/dist/cjs/layout/layout-service.js +69 -0
  37. package/dist/cjs/layout/models.js +39 -0
  38. package/dist/cjs/layout/rewrite-edge-host.js +161 -0
  39. package/dist/cjs/layout/themes.js +74 -0
  40. package/dist/cjs/layout/utils.js +117 -0
  41. package/dist/cjs/media/index.js +38 -0
  42. package/dist/cjs/media/media-api.js +100 -0
  43. package/dist/cjs/models.js +2 -0
  44. package/dist/cjs/personalize/index.js +15 -0
  45. package/dist/cjs/personalize/layout-personalizer.js +98 -0
  46. package/dist/cjs/personalize/personalize-service.js +109 -0
  47. package/dist/cjs/personalize/utils.js +143 -0
  48. package/dist/cjs/site/error-pages-service.js +95 -0
  49. package/dist/cjs/site/index.js +26 -0
  50. package/dist/cjs/site/models.js +2 -0
  51. package/dist/cjs/site/redirects-service.js +109 -0
  52. package/dist/cjs/site/robots-service.js +74 -0
  53. package/dist/cjs/site/site-resolver.js +73 -0
  54. package/dist/cjs/site/siteinfo-service.js +94 -0
  55. package/dist/cjs/site/sitemap-xml-service.js +92 -0
  56. package/dist/cjs/site/sitepath-service.js +201 -0
  57. package/dist/cjs/site/utils.js +55 -0
  58. package/dist/cjs/sitecore-service-base.js +33 -0
  59. package/dist/cjs/tools/codegen/component-generation.js +49 -0
  60. package/dist/cjs/tools/codegen/extract-files.js +103 -0
  61. package/dist/cjs/tools/codegen/import-map.js +398 -0
  62. package/dist/cjs/tools/codegen/utils.js +418 -0
  63. package/dist/cjs/tools/generate-map.js +2 -0
  64. package/dist/cjs/tools/generateSites.js +58 -0
  65. package/dist/cjs/tools/index.js +30 -0
  66. package/dist/cjs/tools/scaffold.js +62 -0
  67. package/dist/cjs/tools/templating/components.js +96 -0
  68. package/dist/cjs/tools/templating/index.js +6 -0
  69. package/dist/esm/client/edge-proxy.js +24 -0
  70. package/dist/esm/client/index.js +4 -0
  71. package/dist/esm/client/models.js +1 -0
  72. package/dist/esm/client/sitecore-client.js +439 -0
  73. package/dist/esm/client/utils.js +49 -0
  74. package/dist/esm/config/define-config.js +194 -0
  75. package/dist/esm/config/index.js +2 -0
  76. package/dist/esm/config/models.js +9 -0
  77. package/dist/esm/config-cli/define-cli-config.js +19 -0
  78. package/dist/esm/config-cli/index.js +2 -0
  79. package/dist/esm/config-cli/models.js +5 -0
  80. package/dist/esm/constants.js +9 -0
  81. package/dist/esm/debug.js +19 -0
  82. package/dist/esm/editing/codegen/index.js +1 -0
  83. package/dist/esm/editing/codegen/preview.js +287 -0
  84. package/dist/esm/editing/component-layout-service.js +56 -0
  85. package/dist/esm/editing/design-library.js +179 -0
  86. package/dist/esm/editing/editing-service.js +75 -0
  87. package/dist/esm/editing/index.js +6 -0
  88. package/dist/esm/editing/models.js +41 -0
  89. package/dist/esm/editing/utils.js +98 -0
  90. package/dist/esm/form/form.js +72 -0
  91. package/dist/esm/form/index.js +1 -0
  92. package/dist/esm/i18n/dictionary-service.js +137 -0
  93. package/dist/esm/i18n/index.js +2 -0
  94. package/dist/esm/i18n/utils.js +13 -0
  95. package/dist/esm/index.js +5 -0
  96. package/dist/esm/layout/content-styles.js +64 -0
  97. package/dist/esm/layout/index.js +7 -0
  98. package/dist/esm/layout/layout-service.js +62 -0
  99. package/dist/esm/layout/models.js +36 -0
  100. package/dist/esm/layout/rewrite-edge-host.js +155 -0
  101. package/dist/esm/layout/themes.js +69 -0
  102. package/dist/esm/layout/utils.js +109 -0
  103. package/dist/esm/media/index.js +2 -0
  104. package/dist/esm/media/media-api.js +90 -0
  105. package/dist/esm/models.js +1 -0
  106. package/dist/esm/personalize/index.js +3 -0
  107. package/dist/esm/personalize/layout-personalizer.js +93 -0
  108. package/dist/esm/personalize/personalize-service.js +102 -0
  109. package/dist/esm/personalize/utils.js +135 -0
  110. package/dist/esm/site/error-pages-service.js +88 -0
  111. package/dist/esm/site/index.js +8 -0
  112. package/dist/esm/site/models.js +1 -0
  113. package/dist/esm/site/redirects-service.js +102 -0
  114. package/dist/esm/site/robots-service.js +67 -0
  115. package/dist/esm/site/site-resolver.js +69 -0
  116. package/dist/esm/site/siteinfo-service.js +87 -0
  117. package/dist/esm/site/sitemap-xml-service.js +85 -0
  118. package/dist/esm/site/sitepath-service.js +193 -0
  119. package/dist/esm/site/utils.js +49 -0
  120. package/dist/esm/sitecore-service-base.js +29 -0
  121. package/dist/esm/tools/codegen/component-generation.js +44 -0
  122. package/dist/esm/tools/codegen/extract-files.js +97 -0
  123. package/dist/esm/tools/codegen/import-map.js +355 -0
  124. package/dist/esm/tools/codegen/utils.js +373 -0
  125. package/dist/esm/tools/generate-map.js +1 -0
  126. package/dist/esm/tools/generateSites.js +51 -0
  127. package/dist/esm/tools/index.js +6 -0
  128. package/dist/esm/tools/scaffold.js +54 -0
  129. package/dist/esm/tools/templating/components.js +59 -0
  130. package/dist/esm/tools/templating/index.js +1 -0
  131. package/editing.d.ts +1 -0
  132. package/i18n.d.ts +1 -0
  133. package/layout.d.ts +1 -0
  134. package/media.d.ts +1 -0
  135. package/package.json +157 -0
  136. package/personalize.d.ts +1 -0
  137. package/site.d.ts +1 -0
  138. package/tools.d.ts +1 -0
  139. package/types/client/edge-proxy.d.ts +17 -0
  140. package/types/client/edge-proxy.d.ts.map +1 -0
  141. package/types/client/index.d.ts +7 -0
  142. package/types/client/index.d.ts.map +1 -0
  143. package/types/client/models.d.ts +21 -0
  144. package/types/client/models.d.ts.map +1 -0
  145. package/types/client/sitecore-client.d.ts +346 -0
  146. package/types/client/sitecore-client.d.ts.map +1 -0
  147. package/types/client/utils.d.ts +15 -0
  148. package/types/client/utils.d.ts.map +1 -0
  149. package/types/config/define-config.d.ts +20 -0
  150. package/types/config/define-config.d.ts.map +1 -0
  151. package/types/config/index.d.ts +3 -0
  152. package/types/config/index.d.ts.map +1 -0
  153. package/types/config/models.d.ts +294 -0
  154. package/types/config/models.d.ts.map +1 -0
  155. package/types/config-cli/define-cli-config.d.ts +9 -0
  156. package/types/config-cli/define-cli-config.d.ts.map +1 -0
  157. package/types/config-cli/index.d.ts +3 -0
  158. package/types/config-cli/index.d.ts.map +1 -0
  159. package/types/config-cli/models.d.ts +6 -0
  160. package/types/config-cli/models.d.ts.map +1 -0
  161. package/types/constants.d.ts +10 -0
  162. package/types/constants.d.ts.map +1 -0
  163. package/types/debug.d.ts +19 -0
  164. package/types/debug.d.ts.map +1 -0
  165. package/types/editing/codegen/index.d.ts +2 -0
  166. package/types/editing/codegen/index.d.ts.map +1 -0
  167. package/types/editing/codegen/preview.d.ts +289 -0
  168. package/types/editing/codegen/preview.d.ts.map +1 -0
  169. package/types/editing/component-layout-service.d.ts +84 -0
  170. package/types/editing/component-layout-service.d.ts.map +1 -0
  171. package/types/editing/design-library.d.ts +119 -0
  172. package/types/editing/design-library.d.ts.map +1 -0
  173. package/types/editing/editing-service.d.ts +71 -0
  174. package/types/editing/editing-service.d.ts.map +1 -0
  175. package/types/editing/index.d.ts +7 -0
  176. package/types/editing/index.d.ts.map +1 -0
  177. package/types/editing/models.d.ts +103 -0
  178. package/types/editing/models.d.ts.map +1 -0
  179. package/types/editing/utils.d.ts +82 -0
  180. package/types/editing/utils.d.ts.map +1 -0
  181. package/types/form/form.d.ts +25 -0
  182. package/types/form/form.d.ts.map +1 -0
  183. package/types/form/index.d.ts +2 -0
  184. package/types/form/index.d.ts.map +1 -0
  185. package/types/i18n/dictionary-service.d.ts +133 -0
  186. package/types/i18n/dictionary-service.d.ts.map +1 -0
  187. package/types/i18n/index.d.ts +3 -0
  188. package/types/i18n/index.d.ts.map +1 -0
  189. package/types/i18n/utils.d.ts +9 -0
  190. package/types/i18n/utils.d.ts.map +1 -0
  191. package/types/index.d.ts +7 -0
  192. package/types/index.d.ts.map +1 -0
  193. package/types/layout/content-styles.d.ts +20 -0
  194. package/types/layout/content-styles.d.ts.map +1 -0
  195. package/types/layout/index.d.ts +7 -0
  196. package/types/layout/index.d.ts.map +1 -0
  197. package/types/layout/layout-service.d.ts +45 -0
  198. package/types/layout/layout-service.d.ts.map +1 -0
  199. package/types/layout/models.d.ts +174 -0
  200. package/types/layout/models.d.ts.map +1 -0
  201. package/types/layout/rewrite-edge-host.d.ts +43 -0
  202. package/types/layout/rewrite-edge-host.d.ts.map +1 -0
  203. package/types/layout/themes.d.ts +13 -0
  204. package/types/layout/themes.d.ts.map +1 -0
  205. package/types/layout/utils.d.ts +56 -0
  206. package/types/layout/utils.d.ts.map +1 -0
  207. package/types/media/index.d.ts +3 -0
  208. package/types/media/index.d.ts.map +1 -0
  209. package/types/media/media-api.d.ts +60 -0
  210. package/types/media/media-api.d.ts.map +1 -0
  211. package/types/models.d.ts +32 -0
  212. package/types/models.d.ts.map +1 -0
  213. package/types/personalize/index.d.ts +4 -0
  214. package/types/personalize/index.d.ts.map +1 -0
  215. package/types/personalize/layout-personalizer.d.ts +29 -0
  216. package/types/personalize/layout-personalizer.d.ts.map +1 -0
  217. package/types/personalize/personalize-service.d.ts +88 -0
  218. package/types/personalize/personalize-service.d.ts.map +1 -0
  219. package/types/personalize/utils.d.ts +78 -0
  220. package/types/personalize/utils.d.ts.map +1 -0
  221. package/types/site/error-pages-service.d.ts +72 -0
  222. package/types/site/error-pages-service.d.ts.map +1 -0
  223. package/types/site/index.d.ts +10 -0
  224. package/types/site/index.d.ts.map +1 -0
  225. package/types/site/models.d.ts +23 -0
  226. package/types/site/models.d.ts.map +1 -0
  227. package/types/site/redirects-service.d.ts +91 -0
  228. package/types/site/redirects-service.d.ts.map +1 -0
  229. package/types/site/robots-service.d.ts +57 -0
  230. package/types/site/robots-service.d.ts.map +1 -0
  231. package/types/site/site-resolver.d.ts +28 -0
  232. package/types/site/site-resolver.d.ts.map +1 -0
  233. package/types/site/siteinfo-service.d.ts +64 -0
  234. package/types/site/siteinfo-service.d.ts.map +1 -0
  235. package/types/site/sitemap-xml-service.d.ts +63 -0
  236. package/types/site/sitemap-xml-service.d.ts.map +1 -0
  237. package/types/site/sitepath-service.d.ts +137 -0
  238. package/types/site/sitepath-service.d.ts.map +1 -0
  239. package/types/site/utils.d.ts +41 -0
  240. package/types/site/utils.d.ts.map +1 -0
  241. package/types/sitecore-service-base.d.ts +31 -0
  242. package/types/sitecore-service-base.d.ts.map +1 -0
  243. package/types/tools/codegen/component-generation.d.ts +50 -0
  244. package/types/tools/codegen/component-generation.d.ts.map +1 -0
  245. package/types/tools/codegen/extract-files.d.ts +20 -0
  246. package/types/tools/codegen/extract-files.d.ts.map +1 -0
  247. package/types/tools/codegen/import-map.d.ts +98 -0
  248. package/types/tools/codegen/import-map.d.ts.map +1 -0
  249. package/types/tools/codegen/utils.d.ts +76 -0
  250. package/types/tools/codegen/utils.d.ts.map +1 -0
  251. package/types/tools/generate-map.d.ts +36 -0
  252. package/types/tools/generate-map.d.ts.map +1 -0
  253. package/types/tools/generateSites.d.ts +22 -0
  254. package/types/tools/generateSites.d.ts.map +1 -0
  255. package/types/tools/index.d.ts +8 -0
  256. package/types/tools/index.d.ts.map +1 -0
  257. package/types/tools/scaffold.d.ts +27 -0
  258. package/types/tools/scaffold.d.ts.map +1 -0
  259. package/types/tools/templating/components.d.ts +104 -0
  260. package/types/tools/templating/components.d.ts.map +1 -0
  261. package/types/tools/templating/index.d.ts +2 -0
  262. package/types/tools/templating/index.d.ts.map +1 -0
@@ -0,0 +1,63 @@
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.ComponentLayoutService = void 0;
7
+ const core_1 = require("@sitecore-content-sdk/core");
8
+ const tools_1 = require("@sitecore-content-sdk/core/tools");
9
+ const debug_1 = __importDefault(require("../debug"));
10
+ const models_1 = require("./models");
11
+ /**
12
+ * REST service that enables Design Library functionality.
13
+ * Returns layout data for a single rendered component.
14
+ * @public
15
+ */
16
+ class ComponentLayoutService {
17
+ constructor(config) {
18
+ this.config = config;
19
+ }
20
+ fetchComponentData(params, fetchOptions) {
21
+ // Choose the correct Edge ID per environment
22
+ const sitecoreContextId = this.config.contextId || this.config.clientContextId;
23
+ if (!sitecoreContextId) {
24
+ throw new Error(`ComponentLayoutService misconfigured: contextId is missing.
25
+ Provide contextId on the server, and clientContextId in the browser if you need to full client-side functionality.`);
26
+ }
27
+ const fetcher = new core_1.NativeDataFetcher({ debugger: debug_1.default.layout });
28
+ debug_1.default.layout('fetching component with uid %s for %s %s %s %s', params.componentUid, params.itemId, params.language, params.siteName, params.dataSourceId);
29
+ return fetcher
30
+ .get(this.getFetchUrl(params), Object.assign(Object.assign({}, fetchOptions), { headers: Object.assign(Object.assign({}, fetchOptions === null || fetchOptions === void 0 ? void 0 : fetchOptions.headers), { 'x-sitecore-contextid': sitecoreContextId, sc_editMode: `${params.mode === models_1.DesignLibraryMode.Metadata}` }) }))
31
+ .then((response) => response.data)
32
+ .catch((error) => {
33
+ var _a;
34
+ if (((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) === 404) {
35
+ return error.response.data;
36
+ }
37
+ throw error;
38
+ });
39
+ }
40
+ getComponentFetchParams(params) {
41
+ // strip undefined fields
42
+ return JSON.parse(JSON.stringify({
43
+ item: params.itemId,
44
+ uid: params.componentUid,
45
+ dataSourceId: params.dataSourceId,
46
+ renderingItemId: params.renderingId,
47
+ version: params.version,
48
+ sc_site: params.siteName,
49
+ sc_lang: params.language || 'en',
50
+ }));
51
+ }
52
+ /**
53
+ * Get the fetch URL for the partial layout data endpoint
54
+ * @param {ComponentLayoutRequestParams} params - The parameters for the request
55
+ * @returns {string} The fetch URL for the component data
56
+ */
57
+ getFetchUrl(params) {
58
+ var _a;
59
+ const baseUrl = (0, tools_1.normalizeUrl)((_a = this.config.edgeUrl) !== null && _a !== void 0 ? _a : core_1.constants.SITECORE_EDGE_PLATFORM_URL_DEFAULT);
60
+ return (0, tools_1.resolveUrl)(`${baseUrl}/layout/component`, this.getComponentFetchParams(params));
61
+ }
62
+ }
63
+ exports.ComponentLayoutService = ComponentLayoutService;
@@ -0,0 +1,191 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.postToDesignLibrary = exports.updateComponent = exports.updateComponentHandler = exports.validateEvent = exports.validateOrigin = exports.addComponentUpdateHandler = exports.DesignLibraryStatus = exports.COMPONENT_PREVIEW_CACHE_KEY_PREFIX = exports.COMPONENT_UPDATE_CACHE_KEY_PREFIX = void 0;
4
+ exports.getDesignLibraryStatusEvent = getDesignLibraryStatusEvent;
5
+ exports.getDesignLibraryScriptLink = getDesignLibraryScriptLink;
6
+ exports.isDesignLibraryMode = isDesignLibraryMode;
7
+ const core_1 = require("@sitecore-content-sdk/core");
8
+ const tools_1 = require("@sitecore-content-sdk/core/tools");
9
+ const models_1 = require("./models");
10
+ /**
11
+ * Event to be sent when report status to design library
12
+ */
13
+ const DESIGN_LIBRARY_STATUS_EVENT_NAME = 'component:status';
14
+ /**
15
+ * Prefix for component update cache keys
16
+ * @internal
17
+ */
18
+ exports.COMPONENT_UPDATE_CACHE_KEY_PREFIX = 'component-update-';
19
+ /**
20
+ * Prefix for component preview cache keys
21
+ * @internal
22
+ */
23
+ exports.COMPONENT_PREVIEW_CACHE_KEY_PREFIX = 'component-preview-';
24
+ /**
25
+ * Enumeration of statuses for the design library.
26
+ * @internal
27
+ */
28
+ var DesignLibraryStatus;
29
+ (function (DesignLibraryStatus) {
30
+ DesignLibraryStatus["READY"] = "ready";
31
+ DesignLibraryStatus["RENDERED"] = "rendered";
32
+ })(DesignLibraryStatus || (exports.DesignLibraryStatus = DesignLibraryStatus = {}));
33
+ /**
34
+ * Adds the browser-side event handler for 'component:update' message used in Design Library
35
+ * The event should update a component on page by uid, with fields and params from event args
36
+ * @param {ComponentRendering} rootComponent root component displayed for Design Library page
37
+ * @param {Function} successCallback callback to be called after successful component update
38
+ * @internal
39
+ */
40
+ const addComponentUpdateHandler = (rootComponent, successCallback) => {
41
+ if (!window)
42
+ return;
43
+ const handler = (e) => (0, exports.updateComponentHandler)(e, rootComponent, successCallback);
44
+ window.addEventListener('message', handler);
45
+ // the power to remove handler outside of this function, if needed
46
+ const unsubscribe = () => {
47
+ window.removeEventListener('message', handler);
48
+ };
49
+ return unsubscribe;
50
+ };
51
+ exports.addComponentUpdateHandler = addComponentUpdateHandler;
52
+ const validateOrigin = (event) => {
53
+ // TODO: use `EDITING_ALLOWED_ORIGINS.concat(getAllowedOriginsFromEnv())` later
54
+ // nextjs's JSS_ALLOWED_ORIGINS is not available on the client, need to use NEXT_PUBLIC_ variable, but it's a breaking change for Deploy
55
+ const allowedOrigins = ['*'];
56
+ return allowedOrigins.some((origin) => origin === event.origin ||
57
+ new RegExp('^' + origin.replace('.', '\\.').replace(/\*/g, '.*') + '$').test(event.origin));
58
+ };
59
+ exports.validateOrigin = validateOrigin;
60
+ /**
61
+ * Validates that a MessageEvent has the expected event name and required data.
62
+ * Logs debug information when validation fails due to invalid origin.
63
+ * @param {MessageEvent} e - The message event to validate.
64
+ * @param {string} eventName - The expected event name to match against e.data.name.
65
+ * @returns {boolean} True if the event has a valid origin, data object, and matching event name; otherwise false.
66
+ */
67
+ const validateEvent = (e, eventName) => {
68
+ if (!e.origin || !e.data || e.data.name !== eventName) {
69
+ // avoid extra noise in logs
70
+ if (!(0, exports.validateOrigin)(e)) {
71
+ console.debug('Component Library: event skipped - invalid origin: message %s from origin %s', e.data.name, e.origin);
72
+ }
73
+ return false;
74
+ }
75
+ return true;
76
+ };
77
+ exports.validateEvent = validateEvent;
78
+ const updateComponentHandler = (e, rootComponent, successCallback) => {
79
+ var _a;
80
+ const eventArgs = e.data;
81
+ if (!e.origin || !eventArgs || eventArgs.name !== 'component:update') {
82
+ // avoid extra noise in logs
83
+ if (!(0, exports.validateOrigin)(e)) {
84
+ console.debug('Component Library: event skipped: message %s from origin %s', eventArgs.name, e.origin);
85
+ }
86
+ return;
87
+ }
88
+ if (!((_a = eventArgs.details) === null || _a === void 0 ? void 0 : _a.uid)) {
89
+ console.debug('Received component:update event without uid, aborting event handler...');
90
+ return;
91
+ }
92
+ const findComponent = (root) => {
93
+ var _a, _b;
94
+ if (((_a = root.uid) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === ((_b = eventArgs.details) === null || _b === void 0 ? void 0 : _b.uid.toLowerCase()))
95
+ return root;
96
+ if (root.placeholders) {
97
+ for (const plhName of Object.keys(root.placeholders)) {
98
+ for (const rendering of root.placeholders[plhName]) {
99
+ const result = findComponent(rendering);
100
+ if (result)
101
+ return result;
102
+ }
103
+ }
104
+ }
105
+ return null;
106
+ };
107
+ const componentToUpdate = findComponent(rootComponent);
108
+ if (componentToUpdate) {
109
+ console.debug('Found component with uid %s to update. Update fields: %o. Update params: %o.', eventArgs.details.uid, eventArgs.details.fields, eventArgs.details.params);
110
+ (0, exports.updateComponent)(componentToUpdate, eventArgs.details.fields, eventArgs.details.params);
111
+ if (successCallback)
112
+ successCallback(rootComponent);
113
+ }
114
+ else {
115
+ console.debug('Rendering with uid %s not found', eventArgs.details.uid);
116
+ }
117
+ // strictly for testing
118
+ return rootComponent;
119
+ };
120
+ exports.updateComponentHandler = updateComponentHandler;
121
+ /**
122
+ * Updates a component's fields and params with the provided values.
123
+ * @param {ComponentRendering<ComponentFields>} component - The component to update.
124
+ * @param {ComponentFields | undefined} fields - The fields to merge into the component.
125
+ * @param {ComponentParams | undefined} params - The params to merge into the component.
126
+ * @internal
127
+ */
128
+ const updateComponent = (component, fields, params) => {
129
+ if (fields) {
130
+ component.fields = Object.assign(Object.assign({}, component.fields), fields);
131
+ }
132
+ if (params) {
133
+ component.params = Object.assign(Object.assign({}, component.params), params);
134
+ }
135
+ };
136
+ exports.updateComponent = updateComponent;
137
+ /**
138
+ * Generates a DesignLibraryStatusEvent with the given status and uid.
139
+ * @param {DesignLibraryStatus} status - The status of rendering.
140
+ * @param {string} uid - The unique identifier for the event.
141
+ * @param {boolean} [isRenderingServerComponent] - Indicates if the component being rendered is a server component.
142
+ * @returns An object representing the DesignLibraryStatusEvent.
143
+ * @internal
144
+ */
145
+ function getDesignLibraryStatusEvent(status, uid, isRenderingServerComponent = false) {
146
+ return {
147
+ name: DESIGN_LIBRARY_STATUS_EVENT_NAME,
148
+ message: {
149
+ status,
150
+ uid,
151
+ isRenderingServerComponent,
152
+ },
153
+ };
154
+ }
155
+ /**
156
+ * Generates the URL for the design library script link.
157
+ * Caller should pass the resolved Edge URL from config.
158
+ * @param {string} [sitecoreEdgeUrl] Sitecore Edge Platform URL (resolved at config level). Defaults to platform URL.
159
+ * @returns The full URL to the design library script.
160
+ * @internal
161
+ */
162
+ function getDesignLibraryScriptLink(sitecoreEdgeUrl = core_1.constants.SITECORE_EDGE_PLATFORM_URL_DEFAULT) {
163
+ return `${(0, tools_1.normalizeUrl)(sitecoreEdgeUrl)}/v1/files/designlibrary/lib/rh-lib-script.js`;
164
+ }
165
+ /**
166
+ * Checks if the given mode is a Design Library mode.
167
+ * @param {unknown} mode - The mode to check.
168
+ * @returns {boolean} True if the mode is a Design Library mode, false otherwise.
169
+ * @internal
170
+ */
171
+ function isDesignLibraryMode(mode) {
172
+ return mode === models_1.DesignLibraryMode.Normal || mode === models_1.DesignLibraryMode.Metadata;
173
+ }
174
+ /**
175
+ * Sends an event to the Design Library
176
+ * @param {DesignLibraryEvent} evt - The event object to send.
177
+ * @internal
178
+ */
179
+ const postToDesignLibrary = (evt) => {
180
+ if (typeof window === 'undefined')
181
+ return;
182
+ const target = window.parent && window.parent !== window ? window.parent : window;
183
+ try {
184
+ console.log('Component Library: sending event', evt.name, evt);
185
+ target.postMessage(evt, '*');
186
+ }
187
+ catch (err) {
188
+ console.error('Component Library: postMessage failed', err, evt);
189
+ }
190
+ };
191
+ exports.postToDesignLibrary = postToDesignLibrary;
@@ -0,0 +1,82 @@
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.EditingService = exports.query = void 0;
7
+ const debug_1 = __importDefault(require("../debug"));
8
+ const models_1 = require("./models");
9
+ /**
10
+ * GraphQL query for fetching editing data.
11
+ */
12
+ exports.query = `
13
+ query EditingQuery($itemId: String!, $language: String!, $version: String) {
14
+ item(path: $itemId, language: $language, version: $version) {
15
+ rendered
16
+ }
17
+ }
18
+ `;
19
+ /**
20
+ * Service for fetching editing data from Sitecore using the Sitecore's GraphQL API.
21
+ * Expected to be used in XMCloud Pages preview (editing) Metadata Edit Mode.
22
+ * @public
23
+ */
24
+ class EditingService {
25
+ /**
26
+ * Fetch layout data using the Sitecore GraphQL endpoint.
27
+ * @param {EditingServiceConfig} serviceConfig configuration
28
+ */
29
+ constructor(serviceConfig) {
30
+ this.serviceConfig = serviceConfig;
31
+ this.graphQLClient = this.getGraphQLClient();
32
+ }
33
+ /**
34
+ * Fetches editing data. Provides the layout data and dictionary phrases
35
+ * @param {object} variables - The parameters for fetching editing data.
36
+ * @param {string} variables.itemId - The item id (path) to fetch layout data for.
37
+ * @param {string} variables.language - The language to fetch layout data for.
38
+ * @param {string} variables.mode - The editing mode to fetch layout data for.
39
+ * @param {string} [variables.version] - The version of the item (optional).
40
+ * @param {LayoutKind} [variables.layoutKind] - The final or shared layout variant.
41
+ * @param {FetchOptions} [fetchOptions] Options to override graphQL client details like retries and fetch implementation
42
+ * @returns {Promise} The layout data and dictionary phrases.
43
+ */
44
+ async fetchEditingData({ itemId, language, version, layoutKind = models_1.LayoutKind.Final, mode }, fetchOptions) {
45
+ var _a;
46
+ debug_1.default.editing('fetching editing data for %s %s %s %s', itemId, language, version, layoutKind);
47
+ if (!language) {
48
+ throw new RangeError('The language must be a non-empty string');
49
+ }
50
+ const editModeHeader = mode === 'edit' ? 'true' : 'false';
51
+ const editingData = await this.graphQLClient.request(exports.query, {
52
+ itemId,
53
+ version,
54
+ language,
55
+ }, Object.assign(Object.assign({}, fetchOptions), { headers: {
56
+ sc_layoutKind: layoutKind,
57
+ sc_editMode: editModeHeader,
58
+ } }));
59
+ const layoutData = ((_a = editingData === null || editingData === void 0 ? void 0 : editingData.item) === null || _a === void 0 ? void 0 : _a.rendered) || {
60
+ sitecore: {
61
+ context: { pageEditing: true, language },
62
+ route: null,
63
+ },
64
+ };
65
+ return {
66
+ layoutData,
67
+ };
68
+ }
69
+ /**
70
+ * Gets a GraphQL client that can make requests to the API.
71
+ * @returns {GraphQLClient} implementation
72
+ */
73
+ getGraphQLClient() {
74
+ if (!this.serviceConfig.clientFactory) {
75
+ throw new Error('clientFactory needs to be provided when initializing GraphQL client.');
76
+ }
77
+ return this.serviceConfig.clientFactory({
78
+ debugger: debug_1.default.editing,
79
+ });
80
+ }
81
+ }
82
+ exports.EditingService = EditingService;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.updateComponent = exports.COMPONENT_PREVIEW_CACHE_KEY_PREFIX = exports.COMPONENT_UPDATE_CACHE_KEY_PREFIX = exports.postToDesignLibrary = exports.isDesignLibraryMode = exports.getDesignLibraryScriptLink = exports.getDesignLibraryStatusEvent = exports.DesignLibraryStatus = exports.addComponentUpdateHandler = exports.DesignLibraryMode = exports.MetadataKind = exports.LayoutKind = exports.DesignLibraryVariantGeneration = exports.ComponentLayoutService = exports.PREVIEW_KEY = exports.PAGES_EDITING_MARKER = exports.INVALID_SECRET_HTML_MESSAGE = exports.QUERY_PARAM_EDITING_SECRET = exports.EDITING_ALLOWED_ORIGINS = exports.getContentSdkPagesClientData = exports.resetEditorChromes = exports.isEditorActive = exports.PagesEditor = exports.DEFAULT_PLACEHOLDER_UID = exports.EditingService = void 0;
4
+ var editing_service_1 = require("./editing-service");
5
+ Object.defineProperty(exports, "EditingService", { enumerable: true, get: function () { return editing_service_1.EditingService; } });
6
+ var utils_1 = require("./utils");
7
+ Object.defineProperty(exports, "DEFAULT_PLACEHOLDER_UID", { enumerable: true, get: function () { return utils_1.DEFAULT_PLACEHOLDER_UID; } });
8
+ Object.defineProperty(exports, "PagesEditor", { enumerable: true, get: function () { return utils_1.PagesEditor; } });
9
+ Object.defineProperty(exports, "isEditorActive", { enumerable: true, get: function () { return utils_1.isEditorActive; } });
10
+ Object.defineProperty(exports, "resetEditorChromes", { enumerable: true, get: function () { return utils_1.resetEditorChromes; } });
11
+ Object.defineProperty(exports, "getContentSdkPagesClientData", { enumerable: true, get: function () { return utils_1.getContentSdkPagesClientData; } });
12
+ Object.defineProperty(exports, "EDITING_ALLOWED_ORIGINS", { enumerable: true, get: function () { return utils_1.EDITING_ALLOWED_ORIGINS; } });
13
+ Object.defineProperty(exports, "QUERY_PARAM_EDITING_SECRET", { enumerable: true, get: function () { return utils_1.QUERY_PARAM_EDITING_SECRET; } });
14
+ Object.defineProperty(exports, "INVALID_SECRET_HTML_MESSAGE", { enumerable: true, get: function () { return utils_1.INVALID_SECRET_HTML_MESSAGE; } });
15
+ Object.defineProperty(exports, "PAGES_EDITING_MARKER", { enumerable: true, get: function () { return utils_1.PAGES_EDITING_MARKER; } });
16
+ Object.defineProperty(exports, "PREVIEW_KEY", { enumerable: true, get: function () { return utils_1.PREVIEW_KEY; } });
17
+ var component_layout_service_1 = require("./component-layout-service");
18
+ Object.defineProperty(exports, "ComponentLayoutService", { enumerable: true, get: function () { return component_layout_service_1.ComponentLayoutService; } });
19
+ var models_1 = require("./models");
20
+ Object.defineProperty(exports, "DesignLibraryVariantGeneration", { enumerable: true, get: function () { return models_1.DesignLibraryVariantGeneration; } });
21
+ var models_2 = require("./models");
22
+ Object.defineProperty(exports, "LayoutKind", { enumerable: true, get: function () { return models_2.LayoutKind; } });
23
+ Object.defineProperty(exports, "MetadataKind", { enumerable: true, get: function () { return models_2.MetadataKind; } });
24
+ Object.defineProperty(exports, "DesignLibraryMode", { enumerable: true, get: function () { return models_2.DesignLibraryMode; } });
25
+ var design_library_1 = require("./design-library");
26
+ Object.defineProperty(exports, "addComponentUpdateHandler", { enumerable: true, get: function () { return design_library_1.addComponentUpdateHandler; } });
27
+ Object.defineProperty(exports, "DesignLibraryStatus", { enumerable: true, get: function () { return design_library_1.DesignLibraryStatus; } });
28
+ Object.defineProperty(exports, "getDesignLibraryStatusEvent", { enumerable: true, get: function () { return design_library_1.getDesignLibraryStatusEvent; } });
29
+ Object.defineProperty(exports, "getDesignLibraryScriptLink", { enumerable: true, get: function () { return design_library_1.getDesignLibraryScriptLink; } });
30
+ Object.defineProperty(exports, "isDesignLibraryMode", { enumerable: true, get: function () { return design_library_1.isDesignLibraryMode; } });
31
+ Object.defineProperty(exports, "postToDesignLibrary", { enumerable: true, get: function () { return design_library_1.postToDesignLibrary; } });
32
+ Object.defineProperty(exports, "COMPONENT_UPDATE_CACHE_KEY_PREFIX", { enumerable: true, get: function () { return design_library_1.COMPONENT_UPDATE_CACHE_KEY_PREFIX; } });
33
+ Object.defineProperty(exports, "COMPONENT_PREVIEW_CACHE_KEY_PREFIX", { enumerable: true, get: function () { return design_library_1.COMPONENT_PREVIEW_CACHE_KEY_PREFIX; } });
34
+ Object.defineProperty(exports, "updateComponent", { enumerable: true, get: function () { return design_library_1.updateComponent; } });
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DesignLibraryVariantGeneration = exports.DesignLibraryMode = exports.MetadataKind = exports.LayoutKind = void 0;
4
+ /**
5
+ * Represents the Editing Layout variant.
6
+ * - shared - shared layout
7
+ * - final - final layout
8
+ * @public
9
+ */
10
+ var LayoutKind;
11
+ (function (LayoutKind) {
12
+ LayoutKind["Final"] = "final";
13
+ LayoutKind["Shared"] = "shared";
14
+ })(LayoutKind || (exports.LayoutKind = LayoutKind = {}));
15
+ /**
16
+ * Represents the kind of metadata element.
17
+ * - open - starting chrome element
18
+ * - close - closing chrome element
19
+ * @internal
20
+ */
21
+ var MetadataKind;
22
+ (function (MetadataKind) {
23
+ MetadataKind["Open"] = "open";
24
+ MetadataKind["Close"] = "close";
25
+ })(MetadataKind || (exports.MetadataKind = MetadataKind = {}));
26
+ /**
27
+ * Represents the mode of the Design Library
28
+ * @public
29
+ */
30
+ var DesignLibraryMode;
31
+ (function (DesignLibraryMode) {
32
+ /** Normal mode */
33
+ DesignLibraryMode["Normal"] = "library";
34
+ /** Metadata mode */
35
+ DesignLibraryMode["Metadata"] = "library-metadata";
36
+ })(DesignLibraryMode || (exports.DesignLibraryMode = DesignLibraryMode = {}));
37
+ /**
38
+ * Variant generation mode for Design Library
39
+ * @public
40
+ */
41
+ var DesignLibraryVariantGeneration;
42
+ (function (DesignLibraryVariantGeneration) {
43
+ DesignLibraryVariantGeneration["Variant"] = "variant";
44
+ })(DesignLibraryVariantGeneration || (exports.DesignLibraryVariantGeneration = DesignLibraryVariantGeneration = {}));
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getContentSdkPagesClientData = exports.resetEditorChromes = exports.isEditorActive = exports.PagesEditor = exports.ChromeRediscoveryGlobalFunctionName = exports.EDITING_ALLOWED_ORIGINS = exports.PAGES_EDITING_MARKER = exports.PREVIEW_KEY = exports.INVALID_SECRET_HTML_MESSAGE = exports.QUERY_PARAM_EDITING_SECRET = exports.DEFAULT_PLACEHOLDER_UID = void 0;
4
+ const tools_1 = require("@sitecore-content-sdk/core/tools");
5
+ /**
6
+ * Default value of uid for root placeholder when uid is not present.
7
+ * @internal
8
+ */
9
+ exports.DEFAULT_PLACEHOLDER_UID = '00000000-0000-0000-0000-000000000000';
10
+ /**
11
+ * Query parameter for editing secret
12
+ * @internal
13
+ */
14
+ exports.QUERY_PARAM_EDITING_SECRET = 'secret';
15
+ /**
16
+ * HTML returned for invalid or missing secret
17
+ * @internal
18
+ */
19
+ exports.INVALID_SECRET_HTML_MESSAGE = '<html><body>Missing or invalid secret</body></html>';
20
+ /**
21
+ * Key to identify whether the app is running in Sitecore Preview mode
22
+ * @internal
23
+ */
24
+ exports.PREVIEW_KEY = 'sc_preview';
25
+ /**
26
+ * ID to be used as a marker for a script rendered in XMC Pages
27
+ * Should identify app is in XM Cloud Pages editing mode
28
+ * @internal
29
+ */
30
+ exports.PAGES_EDITING_MARKER = 'jss-hrz-editing';
31
+ /**
32
+ * Default allowed origins for editing requests. This is used to enforce CORS, CSP headers.
33
+ * @internal
34
+ */
35
+ exports.EDITING_ALLOWED_ORIGINS = [
36
+ 'https://pages.sitecorecloud.io',
37
+ 'https://xmapps.sitecorecloud.io',
38
+ 'https://designlibrary.sitecorecloud.io',
39
+ ];
40
+ /**
41
+ * Copy of chrome rediscovery contract from Horizon (chrome-rediscovery.contract.ts)
42
+ */
43
+ exports.ChromeRediscoveryGlobalFunctionName = {
44
+ name: 'Sitecore.Horizon.ResetChromes',
45
+ };
46
+ /**
47
+ * Static utility class for Sitecore Pages Editor
48
+ * @public
49
+ */
50
+ class PagesEditor {
51
+ /**
52
+ * Determines whether the current execution context is within a Pages Editor.
53
+ * Pages Editor environment can be identified only in the browser
54
+ * @returns true if executing within a Pages Editor
55
+ */
56
+ static isActive() {
57
+ if ((0, tools_1.isServer)()) {
58
+ return false;
59
+ }
60
+ // Check for Chromes mode
61
+ const chromesCheck = window.location.search.indexOf('sc_headless_mode=edit') > -1;
62
+ // Content SDK will render a content-sdk-exclusive script element in Metadata mode to indicate edit mode in Pages
63
+ return chromesCheck || !!window.document.getElementById(exports.PAGES_EDITING_MARKER);
64
+ }
65
+ static resetChromes() {
66
+ if ((0, tools_1.isServer)()) {
67
+ return;
68
+ }
69
+ // Reset chromes in Pages
70
+ window[exports.ChromeRediscoveryGlobalFunctionName.name] &&
71
+ window[exports.ChromeRediscoveryGlobalFunctionName.name]();
72
+ }
73
+ }
74
+ exports.PagesEditor = PagesEditor;
75
+ /**
76
+ * Determines whether the current execution context is within a Sitecore editor.
77
+ * Sitecore Editor environment can be identified only in the browser
78
+ * @returns true if executing within a Sitecore editor
79
+ * @public
80
+ */
81
+ const isEditorActive = () => {
82
+ return PagesEditor.isActive();
83
+ };
84
+ exports.isEditorActive = isEditorActive;
85
+ /**
86
+ * Resets Sitecore editor "chromes"
87
+ * @public
88
+ */
89
+ const resetEditorChromes = () => {
90
+ if (PagesEditor.isActive()) {
91
+ PagesEditor.resetChromes();
92
+ }
93
+ };
94
+ exports.resetEditorChromes = resetEditorChromes;
95
+ /**
96
+ * Gets extra Content SDK clientData scripts to render in XMC Pages in addition to clientData from Pages itself
97
+ * @returns {Record} collection of clientData
98
+ * @internal
99
+ */
100
+ const getContentSdkPagesClientData = () => {
101
+ const clientData = {};
102
+ clientData[exports.PAGES_EDITING_MARKER] = {};
103
+ return clientData;
104
+ };
105
+ exports.getContentSdkPagesClientData = getContentSdkPagesClientData;
@@ -0,0 +1,81 @@
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.subscribeToFormSubmitEvent = exports.executeScriptElements = exports.loadForm = void 0;
7
+ const browser_1 = require("@sitecore-cloudsdk/events/browser");
8
+ const client_1 = require("../client");
9
+ const debug_1 = __importDefault(require("../debug"));
10
+ /**
11
+ * Fetches the form markup from the Sitecore Edge service and renders it in the component's template.
12
+ * @param {string} contextId - The unique identifier of the current context
13
+ * @param {string} formId - The unique identifier of the form
14
+ * @param {string} [edgeUrl] - The URL of the Sitecore Edge Platform
15
+ * @internal
16
+ */
17
+ const loadForm = async (contextId, formId, edgeUrl) => {
18
+ if (!contextId) {
19
+ debug_1.default.form('Form was not able to render since context id was not provided');
20
+ return '';
21
+ }
22
+ const url = (0, client_1.getEdgeProxyFormsUrl)(contextId, formId, edgeUrl);
23
+ try {
24
+ debug_1.default.form(`Fetching form data from ${url}`);
25
+ const rsp = await fetch(url, {
26
+ method: 'GET',
27
+ cache: 'no-cache',
28
+ });
29
+ if (rsp.status !== 200) {
30
+ throw new Error('Failed to fetch form data');
31
+ }
32
+ const content = await rsp.text();
33
+ debug_1.default.form(`Form data fetch response: ${content}`);
34
+ return content;
35
+ }
36
+ catch (error) {
37
+ debug_1.default.form(`Form '${formId}' was not able to render`, error);
38
+ throw error;
39
+ }
40
+ };
41
+ exports.loadForm = loadForm;
42
+ /**
43
+ * When you set the innerHTML property of an element, the browser does not execute any <script> tags included in the HTML string
44
+ * This method ensures that any <script> elements within the loaded HTML are executed.
45
+ * It re-creates the script elements and appends the to the component's template, then removes old script elements to avoid duplication.
46
+ * @param {HTMLElement} rootElement - The root element to execute script elements within
47
+ * @internal
48
+ */
49
+ const executeScriptElements = (rootElement) => {
50
+ const scriptElements = rootElement.querySelectorAll('script');
51
+ if (!scriptElements) {
52
+ return;
53
+ }
54
+ Array.from(scriptElements).forEach((scriptElement) => {
55
+ var _a;
56
+ const clonedElement = document.createElement('script');
57
+ Array.from(scriptElement.attributes).forEach((attribute) => {
58
+ clonedElement.setAttribute(attribute.name, attribute.value);
59
+ });
60
+ clonedElement.text = scriptElement.text;
61
+ (_a = scriptElement === null || scriptElement === void 0 ? void 0 : scriptElement.parentNode) === null || _a === void 0 ? void 0 : _a.replaceChild(clonedElement, scriptElement);
62
+ });
63
+ };
64
+ exports.executeScriptElements = executeScriptElements;
65
+ /**
66
+ * Subscribes to the Form event
67
+ * This listener captures interactions such as form views or submissions
68
+ * @param {HTMLElement} formElement - The form element to subscribe to events on
69
+ * @param {string} [componentId] - The unique identifier of the component
70
+ * @internal
71
+ */
72
+ const subscribeToFormSubmitEvent = (formElement, componentId) => {
73
+ formElement.addEventListener('form:engage', ((e) => {
74
+ const { formId, name } = e.detail;
75
+ if (formId && name) {
76
+ debug_1.default.form('Sending form event', formId, name);
77
+ (0, browser_1.form)(formId, name, (componentId === null || componentId === void 0 ? void 0 : componentId.replace(/-/g, '')) || '');
78
+ }
79
+ }));
80
+ };
81
+ exports.subscribeToFormSubmitEvent = subscribeToFormSubmitEvent;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.subscribeToFormSubmitEvent = exports.loadForm = exports.executeScriptElements = void 0;
4
+ var form_1 = require("./form");
5
+ Object.defineProperty(exports, "executeScriptElements", { enumerable: true, get: function () { return form_1.executeScriptElements; } });
6
+ Object.defineProperty(exports, "loadForm", { enumerable: true, get: function () { return form_1.loadForm; } });
7
+ Object.defineProperty(exports, "subscribeToFormSubmitEvent", { enumerable: true, get: function () { return form_1.subscribeToFormSubmitEvent; } });