@enonic/nextjs-adapter 2.0.0 → 3.0.0-B2

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 (245) hide show
  1. package/baseMappings.js +3 -2
  2. package/baseMappings.js.map +1 -0
  3. package/client.d.ts +1 -0
  4. package/client.js +3 -0
  5. package/client.js.map +1 -0
  6. package/common/ComponentRegistry.d.ts +34 -0
  7. package/{ComponentRegistry.js → common/ComponentRegistry.js} +26 -26
  8. package/common/ComponentRegistry.js.map +1 -0
  9. package/{UrlProcessor.d.ts → common/UrlProcessor.d.ts} +5 -4
  10. package/{UrlProcessor.js → common/UrlProcessor.js} +40 -17
  11. package/common/UrlProcessor.js.map +1 -0
  12. package/common/constants.d.ts +50 -0
  13. package/common/constants.js +79 -0
  14. package/common/constants.js.map +1 -0
  15. package/common/env.d.ts +11 -0
  16. package/common/env.js +28 -0
  17. package/common/env.js.map +1 -0
  18. package/guillotine/applyProcessors.d.ts +2 -0
  19. package/guillotine/applyProcessors.js +33 -0
  20. package/guillotine/applyProcessors.js.map +1 -0
  21. package/guillotine/buildComponentTree.d.ts +2 -0
  22. package/guillotine/buildComponentTree.js +45 -0
  23. package/guillotine/buildComponentTree.js.map +1 -0
  24. package/guillotine/buildErrorResponse.d.ts +3 -0
  25. package/guillotine/buildErrorResponse.js +26 -0
  26. package/guillotine/buildErrorResponse.js.map +1 -0
  27. package/guillotine/buildPage.d.ts +2 -0
  28. package/guillotine/buildPage.js +10 -0
  29. package/guillotine/buildPage.js.map +1 -0
  30. package/guillotine/collectComponentDescriptors.d.ts +6 -0
  31. package/guillotine/collectComponentDescriptors.js +43 -0
  32. package/guillotine/collectComponentDescriptors.js.map +1 -0
  33. package/guillotine/combineMultipleQueries.d.ts +2 -0
  34. package/guillotine/combineMultipleQueries.js +58 -0
  35. package/guillotine/combineMultipleQueries.js.map +1 -0
  36. package/guillotine/createMetaData.d.ts +17 -0
  37. package/guillotine/createMetaData.js +44 -0
  38. package/guillotine/createMetaData.js.map +1 -0
  39. package/guillotine/fetchContent.d.ts +1 -41
  40. package/guillotine/fetchContent.js +193 -800
  41. package/guillotine/fetchContent.js.map +1 -0
  42. package/guillotine/fetchContentData.d.ts +2 -0
  43. package/guillotine/fetchContentData.js +27 -0
  44. package/guillotine/fetchContentData.js.map +1 -0
  45. package/guillotine/fetchContentPathsForAllLocales.d.ts +2 -0
  46. package/guillotine/fetchContentPathsForAllLocales.js +21 -0
  47. package/guillotine/fetchContentPathsForAllLocales.js.map +1 -0
  48. package/guillotine/fetchContentPathsForLocale.d.ts +2 -0
  49. package/guillotine/fetchContentPathsForLocale.js +40 -0
  50. package/guillotine/fetchContentPathsForLocale.js.map +1 -0
  51. package/guillotine/fetchFromApi.d.ts +3 -0
  52. package/guillotine/fetchFromApi.js +65 -0
  53. package/guillotine/fetchFromApi.js.map +1 -0
  54. package/guillotine/fetchGuillotine.d.ts +3 -0
  55. package/guillotine/fetchGuillotine.js +55 -0
  56. package/guillotine/fetchGuillotine.js.map +1 -0
  57. package/guillotine/fetchMetaData.d.ts +2 -0
  58. package/guillotine/fetchMetaData.js +30 -0
  59. package/guillotine/fetchMetaData.js.map +1 -0
  60. package/guillotine/getCleanContentPathArrayOrThrow400.d.ts +2 -0
  61. package/guillotine/getCleanContentPathArrayOrThrow400.js +20 -0
  62. package/guillotine/getCleanContentPathArrayOrThrow400.js.map +1 -0
  63. package/guillotine/getComponentConfig.d.ts +2 -0
  64. package/guillotine/getComponentConfig.js +5 -0
  65. package/guillotine/getComponentConfig.js.map +1 -0
  66. package/guillotine/getContentAndComponentPaths.d.ts +1 -0
  67. package/guillotine/getContentAndComponentPaths.js +12 -0
  68. package/guillotine/getContentAndComponentPaths.js.map +1 -0
  69. package/guillotine/getMetaData.d.ts +0 -92
  70. package/guillotine/getMetaData.js +47 -109
  71. package/guillotine/getMetaData.js.map +1 -0
  72. package/guillotine/getParentRegion.d.ts +2 -0
  73. package/guillotine/getParentRegion.js +40 -0
  74. package/guillotine/getParentRegion.js.map +1 -0
  75. package/guillotine/getQueryAndVariables.d.ts +2 -0
  76. package/guillotine/getQueryAndVariables.js +32 -0
  77. package/guillotine/getQueryAndVariables.js.map +1 -0
  78. package/guillotine/metadata/configQuery.d.ts +2 -0
  79. package/guillotine/metadata/configQuery.js +36 -0
  80. package/guillotine/metadata/configQuery.js.map +1 -0
  81. package/guillotine/metadata/richTextQuery.d.ts +1 -0
  82. package/guillotine/metadata/richTextQuery.js +32 -0
  83. package/guillotine/metadata/richTextQuery.js.map +1 -0
  84. package/guillotine/parseComponentPath.d.ts +2 -0
  85. package/guillotine/parseComponentPath.js +22 -0
  86. package/guillotine/parseComponentPath.js.map +1 -0
  87. package/guillotine/prefixLayoutPath.d.ts +1 -0
  88. package/guillotine/prefixLayoutPath.js +13 -0
  89. package/guillotine/prefixLayoutPath.js.map +1 -0
  90. package/guillotine/processComponentConfig.d.ts +2 -0
  91. package/guillotine/processComponentConfig.js +30 -0
  92. package/guillotine/processComponentConfig.js.map +1 -0
  93. package/guillotine/restrictComponentsToPath.d.ts +2 -0
  94. package/guillotine/restrictComponentsToPath.js +35 -0
  95. package/guillotine/restrictComponentsToPath.js.map +1 -0
  96. package/guillotine/validateData.d.ts +2 -0
  97. package/guillotine/validateData.js +7 -0
  98. package/guillotine/validateData.js.map +1 -0
  99. package/guillotine/validateNotFound.d.ts +2 -0
  100. package/guillotine/validateNotFound.js +16 -0
  101. package/guillotine/validateNotFound.js.map +1 -0
  102. package/guillotine/validateShortcut.d.ts +2 -0
  103. package/guillotine/validateShortcut.js +29 -0
  104. package/guillotine/validateShortcut.js.map +1 -0
  105. package/i18n/LocaleContext.d.ts +7 -0
  106. package/i18n/LocaleContext.jsx +46 -0
  107. package/i18n/LocaleContext.jsx.map +1 -0
  108. package/i18n/i18n.d.ts +11 -0
  109. package/i18n/i18n.js +57 -0
  110. package/i18n/i18n.js.map +1 -0
  111. package/index.d.ts +18 -5
  112. package/index.js +18 -5
  113. package/index.js.map +1 -0
  114. package/package.json +67 -16
  115. package/query/Shortcut.js +1 -0
  116. package/query/Shortcut.js.map +1 -0
  117. package/types/component.d.ts +114 -0
  118. package/types/component.js +2 -0
  119. package/types/component.js.map +1 -0
  120. package/types/componentProps.d.ts +104 -0
  121. package/types/componentProps.js +2 -0
  122. package/types/componentProps.js.map +1 -0
  123. package/types/guillotine.d.ts +342 -0
  124. package/types/guillotine.js +2 -0
  125. package/types/guillotine.js.map +1 -0
  126. package/types/i18n.d.ts +7 -0
  127. package/types/i18n.js +2 -0
  128. package/types/i18n.js.map +1 -0
  129. package/types/index.d.ts +45 -0
  130. package/types/index.js +3 -0
  131. package/types/index.js.map +1 -0
  132. package/types/next.d.ts +6 -0
  133. package/types/next.js +2 -0
  134. package/types/next.js.map +1 -0
  135. package/types/util.d.ts +3 -0
  136. package/types/util.js +3 -0
  137. package/types/util.js.map +1 -0
  138. package/utils/addLineNumbers.d.ts +1 -0
  139. package/utils/addLineNumbers.js +4 -0
  140. package/utils/addLineNumbers.js.map +1 -0
  141. package/utils/buildGuillotineRequestHeaders.d.ts +7 -0
  142. package/utils/buildGuillotineRequestHeaders.js +16 -0
  143. package/utils/buildGuillotineRequestHeaders.js.map +1 -0
  144. package/utils/commonChars.d.ts +1 -0
  145. package/utils/commonChars.js +17 -0
  146. package/utils/commonChars.js.map +1 -0
  147. package/utils/fixDoubleSlashes.d.ts +1 -0
  148. package/utils/fixDoubleSlashes.js +4 -0
  149. package/utils/fixDoubleSlashes.js.map +1 -0
  150. package/utils/getContentApiUrl.d.ts +2 -0
  151. package/utils/getContentApiUrl.js +15 -0
  152. package/utils/getContentApiUrl.js.map +1 -0
  153. package/utils/getProjectLocaleConfig.d.ts +2 -0
  154. package/utils/getProjectLocaleConfig.js +19 -0
  155. package/utils/getProjectLocaleConfig.js.map +1 -0
  156. package/utils/getProjectLocaleConfigById.d.ts +2 -0
  157. package/utils/getProjectLocaleConfigById.js +16 -0
  158. package/utils/getProjectLocaleConfigById.js.map +1 -0
  159. package/utils/getProjectLocaleConfigByLocale.d.ts +2 -0
  160. package/utils/getProjectLocaleConfigByLocale.js +13 -0
  161. package/utils/getProjectLocaleConfigByLocale.js.map +1 -0
  162. package/utils/getProjectLocaleConfigs.d.ts +2 -0
  163. package/utils/getProjectLocaleConfigs.js +30 -0
  164. package/utils/getProjectLocaleConfigs.js.map +1 -0
  165. package/utils/getProjectLocales.d.ts +1 -0
  166. package/utils/getProjectLocales.js +5 -0
  167. package/utils/getProjectLocales.js.map +1 -0
  168. package/utils/getRenderMode.d.ts +3 -0
  169. package/utils/getRenderMode.js +8 -0
  170. package/utils/getRenderMode.js.map +1 -0
  171. package/utils/getRequestLocaleInfo.d.ts +6 -0
  172. package/utils/getRequestLocaleInfo.js +26 -0
  173. package/utils/getRequestLocaleInfo.js.map +1 -0
  174. package/utils/getXpBaseUrl.d.ts +2 -0
  175. package/utils/getXpBaseUrl.js +8 -0
  176. package/utils/getXpBaseUrl.js.map +1 -0
  177. package/utils/indent.d.ts +1 -0
  178. package/utils/indent.js +5 -0
  179. package/utils/indent.js.map +1 -0
  180. package/utils/sanitizeGraphqlName.d.ts +1 -0
  181. package/utils/sanitizeGraphqlName.js +12 -0
  182. package/utils/sanitizeGraphqlName.js.map +1 -0
  183. package/views/BaseComponent.d.ts +5 -10
  184. package/views/BaseComponent.jsx +17 -6
  185. package/views/BaseComponent.jsx.map +1 -0
  186. package/views/BaseContent.d.ts +3 -3
  187. package/views/BaseContent.jsx +2 -5
  188. package/views/BaseContent.jsx.map +1 -0
  189. package/views/BaseLayout.d.ts +3 -16
  190. package/views/BaseLayout.jsx +3 -3
  191. package/views/BaseLayout.jsx.map +1 -0
  192. package/views/BaseMacro.d.ts +3 -13
  193. package/views/BaseMacro.jsx +4 -3
  194. package/views/BaseMacro.jsx.map +1 -0
  195. package/views/BasePage.d.ts +3 -18
  196. package/views/BasePage.jsx +3 -3
  197. package/views/BasePage.jsx.map +1 -0
  198. package/views/BasePart.d.ts +3 -18
  199. package/views/BasePart.jsx +3 -3
  200. package/views/BasePart.jsx.map +1 -0
  201. package/views/Empty.d.ts +2 -2
  202. package/views/Empty.jsx +2 -1
  203. package/views/Empty.jsx.map +1 -0
  204. package/views/Fragment.d.ts +3 -9
  205. package/views/Fragment.jsx +2 -2
  206. package/views/Fragment.jsx.map +1 -0
  207. package/views/MainView.d.ts +3 -3
  208. package/views/MainView.jsx +2 -2
  209. package/views/MainView.jsx.map +1 -0
  210. package/views/PropsView.d.ts +3 -0
  211. package/views/PropsView.jsx +21 -0
  212. package/views/PropsView.jsx.map +1 -0
  213. package/views/Region.d.ts +4 -17
  214. package/views/Region.jsx +2 -2
  215. package/views/Region.jsx.map +1 -0
  216. package/views/RichTextView.d.ts +3 -13
  217. package/views/RichTextView.jsx +6 -3
  218. package/views/RichTextView.jsx.map +1 -0
  219. package/views/SingleComponent.d.ts +3 -3
  220. package/views/SingleComponent.jsx +1 -2
  221. package/views/SingleComponent.jsx.map +1 -0
  222. package/views/StaticContent.d.ts +2 -6
  223. package/views/StaticContent.jsx +1 -0
  224. package/views/StaticContent.jsx.map +1 -0
  225. package/views/Text.d.ts +5 -5
  226. package/views/Text.jsx +1 -1
  227. package/views/Text.jsx.map +1 -0
  228. package/views/getClientHydratedHtml.d.ts +2 -0
  229. package/views/getClientHydratedHtml.jsx +9 -0
  230. package/views/getClientHydratedHtml.jsx.map +1 -0
  231. package/views/macros/DefaultMacro.d.ts +1 -1
  232. package/views/macros/DefaultMacro.jsx +1 -0
  233. package/views/macros/DefaultMacro.jsx.map +1 -0
  234. package/views/macros/DisableMacro.d.ts +1 -1
  235. package/views/macros/DisableMacro.jsx +1 -0
  236. package/views/macros/DisableMacro.jsx.map +1 -0
  237. package/ComponentRegistry.d.ts +0 -64
  238. package/server/ClearableFileCache.d.ts +0 -31
  239. package/server/ClearableFileCache.js +0 -472
  240. package/server/cache.d.ts +0 -2
  241. package/server/cache.js +0 -129
  242. package/server/index.d.ts +0 -5
  243. package/server/index.js +0 -132
  244. package/utils.d.ts +0 -114
  245. package/utils.js +0 -241
@@ -1,8 +1,7 @@
1
- import { sanitizeGraphqlName } from '../utils';
2
- import { ComponentRegistry } from '../ComponentRegistry';
3
- const macroConfigQuery = () => {
4
- return configQuery(ComponentRegistry.getMacros(), false, false);
5
- };
1
+ import { ComponentRegistry } from '../common/ComponentRegistry';
2
+ import { configQuery } from './metadata/configQuery';
3
+ import { richTextQuery } from './metadata/richTextQuery';
4
+ import { indent } from '../utils/indent';
6
5
  const partConfigQuery = () => {
7
6
  return configQuery(ComponentRegistry.getParts());
8
7
  };
@@ -12,117 +11,56 @@ const layoutConfigQuery = () => {
12
11
  const pageConfigQuery = () => {
13
12
  return configQuery(ComponentRegistry.getPages());
14
13
  };
15
- const configQuery = (list, includeAppName = true, canUseConfigAsJson = true) => {
16
- const hasQueryList = (list === null || list === void 0 ? void 0 : list.filter(([key, def]) => def.configQuery)) || [];
17
- if (hasQueryList.length === 0) {
18
- return canUseConfigAsJson ? 'configAsJson' : '';
19
- }
20
- const configsByApp = {};
21
- hasQueryList
22
- .forEach((entry) => {
23
- const nameParts = entry[0].split(':');
24
- if (nameParts.length === 2) {
25
- const sanitizedAppName = sanitizeGraphqlName(nameParts[0]);
26
- let existingConfigs = configsByApp[sanitizedAppName];
27
- if (!existingConfigs) {
28
- existingConfigs = [];
29
- configsByApp[sanitizedAppName] = existingConfigs;
30
- }
31
- existingConfigs.push(`${sanitizeGraphqlName(nameParts[1])}${entry[1].configQuery}`);
32
- }
33
- });
34
- // Still query for configAsJson if at least one item has no configQuery defined
35
- const configAsJsonQuery = canUseConfigAsJson && hasQueryList.length < list.length ? 'configAsJson' : '';
36
- if (!includeAppName) {
37
- return `${configAsJsonQuery}
38
- config {
39
- ${Object.values(configsByApp).reduce((arr, curr) => arr.concat(curr), []).join('\n')}
40
- }`;
41
- }
42
- else {
43
- return `${configAsJsonQuery}
44
- config {
45
- ${Object.entries(configsByApp).map(entry => entry[0] + '{\n' + entry[1].join('\n') + '\n}')}
46
- }`;
47
- }
48
- };
49
14
  /*
50
15
  IMPORTANT: make sure to transform your queries into functions too when using this function inside them !!!
51
16
  */
52
- export const richTextQuery = (fieldName) => {
53
- return `${fieldName}(processHtml:{type:absolute, imageWidths:[400, 800, 1200], imageSizes:"(max-width: 400px) 400px, (max-width: 800px) 800px, 1200px"}) {
54
- processedHtml
55
- macros {
56
- ref
57
- name
58
- descriptor
59
- ${macroConfigQuery()}
60
- }
61
- links {
62
- ref
63
- media {
64
- content {
65
- _id
66
- }
67
- }
68
- }
69
- images {
70
- ref
71
- image {
72
- _id
73
- }
74
- }
75
- }`;
76
- };
77
- const componentsQuery = () => `
78
- type
79
- path
80
- page {
81
- descriptor
82
- ${pageConfigQuery()}
83
- template {
84
- _path
85
- }
86
- }
87
- layout {
88
- descriptor
89
- ${layoutConfigQuery()}
90
- }
91
- text {
92
- ${richTextQuery('value')}
93
- }
94
- part {
95
- descriptor
96
- ${partConfigQuery()}
97
- }
98
- image {
99
- caption
100
- image {
101
- imageUrl (type:absolute, scale: "width-768")
102
- }
103
- }
104
- `;
17
+ const componentsQuery = () => `type
18
+ path
19
+ page {
20
+ descriptor
21
+ ${indent(pageConfigQuery(), 4)}
22
+ template {
23
+ _path
24
+ }
25
+ }
26
+ layout {
27
+ descriptor
28
+ ${indent(layoutConfigQuery(), 4)}
29
+ }
30
+ text {
31
+ ${indent(richTextQuery('value'), 4)}
32
+ }
33
+ part {
34
+ descriptor
35
+ ${indent(partConfigQuery(), 4)}
36
+ }
37
+ image {
38
+ caption
39
+ image {
40
+ imageUrl (type:absolute, scale: "width-768")
41
+ }
42
+ }`;
105
43
  // THIS QUERY DOES NOT SUPPORT NESTED FRAGMENTS
106
- export const pageFragmentQuery = () => `
107
- components(resolveFragment: false, resolveTemplate: true) {
44
+ export const pageFragmentQuery = () => `components(resolveFragment: false, resolveTemplate: true) {
45
+ fragment {
46
+ id
108
47
  fragment {
109
- id
110
- fragment {
111
48
  components {
112
- ${componentsQuery()}
49
+ ${indent(componentsQuery(), 16)}
113
50
  }
114
- }
115
51
  }
116
- ${componentsQuery()}
117
- }`;
52
+ }
53
+ ${indent(componentsQuery(), 4)}
54
+ }`;
118
55
  export function getMetaQuery(pageFragment) {
119
- return `query($path:ID!){
120
- guillotine {
121
- get(key:$path) {
122
- _path
123
- type
124
- ${pageFragment || ''}
125
- }
126
- }
127
- }`;
56
+ return `query($path:ID!) {
57
+ guillotine {
58
+ get(key:$path) {
59
+ _path
60
+ type
61
+ ${indent(pageFragment || '', 12)}
62
+ }
63
+ }
64
+ }`;
128
65
  }
66
+ //# sourceMappingURL=getMetaData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getMetaData.js","sourceRoot":"","sources":["../../src/guillotine/getMetaData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,iBAAiB,EAAC,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAC,WAAW,EAAC,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAC,aAAa,EAAC,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAC,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAGvC,MAAM,eAAe,GAAG,GAAW,EAAE;IACjC,OAAO,WAAW,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC,CAAC;AACrD,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,GAAW,EAAE;IACnC,OAAO,WAAW,CAAC,iBAAiB,CAAC,UAAU,EAAE,CAAC,CAAC;AACvD,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,GAAW,EAAE;IACjC,OAAO,WAAW,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC,CAAC;AACrD,CAAC,CAAC;AAGF;;GAEG;AACH,MAAM,eAAe,GAAG,GAAG,EAAE,CAAC;;;;EAI5B,MAAM,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;;;;;;;EAO5B,MAAM,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;;;EAG9B,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;;;;EAIjC,MAAM,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;;;;;;;EAO5B,CAAC;AAEH,+CAA+C;AAC/C,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,EAAE,CAAC;;;;;EAKrC,MAAM,CAAC,eAAe,EAAE,EAAC,EAAE,CAAC;;;;EAI5B,MAAM,CAAC,eAAe,EAAE,EAAC,CAAC,CAAC;EAC3B,CAAC;AAEH,MAAM,UAAU,YAAY,CAAC,YAAqB;IAC9C,OAAO;;;;;EAKT,MAAM,CAAC,YAAY,IAAI,EAAE,EAAE,EAAE,CAAC;;;EAG9B,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { PageComponent, PageRegion, PathFragment, RegionTree } from '../types';
2
+ export declare function getParentRegion(source: RegionTree, contentType: string, cmpPath: PathFragment[], components?: PageComponent[], createMissing?: boolean): PageRegion | undefined;
@@ -0,0 +1,40 @@
1
+ import { XP_COMPONENT_TYPE } from '../common/constants';
2
+ import { prefixLayoutPath } from './prefixLayoutPath';
3
+ export function getParentRegion(source, contentType, cmpPath, components = [], createMissing) {
4
+ let currentTree = source;
5
+ let currentRegion;
6
+ let parentPath = '';
7
+ for (let i = 0; i < cmpPath.length; i++) {
8
+ const pathFragment = cmpPath[i];
9
+ const regionName = pathFragment.region;
10
+ parentPath += `/${pathFragment.region}/${pathFragment.index}`;
11
+ currentRegion = currentTree[regionName];
12
+ if (!currentRegion) {
13
+ if (createMissing) {
14
+ currentRegion = {
15
+ name: regionName,
16
+ components: [],
17
+ };
18
+ currentTree[regionName] = currentRegion;
19
+ }
20
+ else {
21
+ throw `Region [${regionName}] was not found`;
22
+ }
23
+ }
24
+ if (i < cmpPath.length - 1) {
25
+ // look for layouts inside if this is not the last path fragment
26
+ const layout = components.find((cmp) => {
27
+ return cmp.type === XP_COMPONENT_TYPE.LAYOUT && prefixLayoutPath(contentType, cmp.path) === parentPath;
28
+ });
29
+ if (!layout) {
30
+ throw `Layout [${parentPath}] not found among components, but needed for component [${JSON.stringify(cmpPath, null, 2)}]`;
31
+ }
32
+ if (!layout.regions) {
33
+ layout.regions = {};
34
+ }
35
+ currentTree = layout.regions;
36
+ }
37
+ } // for
38
+ return currentRegion;
39
+ }
40
+ //# sourceMappingURL=getParentRegion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getParentRegion.js","sourceRoot":"","sources":["../../src/guillotine/getParentRegion.ts"],"names":[],"mappings":"AAQA,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AAGpD,MAAM,UAAU,eAAe,CAC3B,MAAkB,EAClB,WAAmB,EACnB,OAAuB,EACvB,aAA8B,EAAE,EAChC,aAAyB;IAEzB,IAAI,WAAW,GAAe,MAAM,CAAC;IACrC,IAAI,aAAqC,CAAC;IAC1C,IAAI,UAAU,GAAG,EAAE,CAAC;IAEpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC;QACvC,UAAU,IAAI,IAAI,YAAY,CAAC,MAAM,IAAI,YAAY,CAAC,KAAK,EAAE,CAAC;QAC9D,aAAa,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;QAExC,IAAI,CAAC,aAAa,EAAE,CAAC;YACjB,IAAI,aAAa,EAAE,CAAC;gBAChB,aAAa,GAAG;oBACZ,IAAI,EAAE,UAAU;oBAChB,UAAU,EAAE,EAAE;iBACjB,CAAC;gBACF,WAAW,CAAC,UAAU,CAAC,GAAG,aAAa,CAAC;YAC5C,CAAC;iBAAM,CAAC;gBACJ,MAAM,WAAW,UAAU,iBAAiB,CAAC;YACjD,CAAC;QACL,CAAC;QAED,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,gEAAgE;YAEhE,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,GAAkB,EAAE,EAAE;gBAClD,OAAO,GAAG,CAAC,IAAI,KAAK,iBAAiB,CAAC,MAAM,IAAI,gBAAgB,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,UAAU,CAAC;YAC3G,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,EAAE,CAAC;gBACV,MAAM,WAAW,UAAU,2DAA2D,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC;YAC9H,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAClB,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC;YACxB,CAAC;YACD,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC;QACjC,CAAC;IACL,CAAC,CAAC,MAAM;IAER,OAAO,aAAa,CAAC;AACzB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { Context, QueryAndVariables, SelectedQueryMaybeVariablesFunc } from '../types';
2
+ export declare function getQueryAndVariables(type: string, path: string, context: Context, selectedQuery?: SelectedQueryMaybeVariablesFunc, config?: any): QueryAndVariables | undefined;
@@ -0,0 +1,32 @@
1
+ export function getQueryAndVariables(type, path, context, selectedQuery, config) {
2
+ let query, getVariables;
3
+ if (typeof selectedQuery === 'string' || typeof selectedQuery === 'function') {
4
+ query = selectedQuery;
5
+ }
6
+ else if (Array.isArray(selectedQuery)) {
7
+ query = selectedQuery[0];
8
+ getVariables = selectedQuery[1];
9
+ }
10
+ else if (typeof selectedQuery === 'object') {
11
+ query = selectedQuery.query;
12
+ getVariables = selectedQuery.variables;
13
+ }
14
+ if (getVariables && typeof getVariables !== 'function') {
15
+ throw Error(`getVariables for content type ${type} should be a function, not: ${typeof getVariables}`);
16
+ }
17
+ if (query && typeof query !== 'string' && typeof query !== 'function') {
18
+ throw Error(`Query for content type ${type} should be a string or function, not: ${typeof query}`);
19
+ }
20
+ if (typeof query === 'function') {
21
+ query = query(path, context, config);
22
+ }
23
+ if (query) {
24
+ return {
25
+ query,
26
+ variables: getVariables ? getVariables(path, context, config) : {
27
+ path,
28
+ },
29
+ };
30
+ }
31
+ }
32
+ //# sourceMappingURL=getQueryAndVariables.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getQueryAndVariables.js","sourceRoot":"","sources":["../../src/guillotine/getQueryAndVariables.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,oBAAoB,CAChC,IAAY,EACZ,IAAY,EACZ,OAAgB,EAChB,aAA+C,EAC/C,MAAY;IAGZ,IAAI,KAAK,EAAE,YAAY,CAAC;IAExB,IACI,OAAO,aAAa,KAAK,QAAQ,IAAI,OAAO,aAAa,KAAK,UAAU,EAC1E,CAAC;QACC,KAAK,GAAG,aAAa,CAAC;IAE1B,CAAC;SAAM,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;QACtC,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QACzB,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;IAEpC,CAAC;SAAM,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;QAC3C,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC;QAC5B,YAAY,GAAG,aAAa,CAAC,SAAS,CAAC;IAC3C,CAAC;IAED,IAAI,YAAY,IAAI,OAAO,YAAY,KAAK,UAAU,EAAE,CAAC;QACrD,MAAM,KAAK,CAAC,iCAAiC,IAAI,+BAA+B,OAAO,YAAY,EAAE,CAAC,CAAC;IAC3G,CAAC;IAED,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;QACpE,MAAM,KAAK,CAAC,0BAA0B,IAAI,yCAAyC,OAAO,KAAK,EAAE,CAAC,CAAC;IACvG,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;QAC9B,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,KAAK,EAAE,CAAC;QACR,OAAO;YACH,KAAK;YACL,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC5D,IAAI;aACP;SACJ,CAAC;IACN,CAAC;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { ComponentDefinition } from '../../types';
2
+ export declare const configQuery: (list: [string, ComponentDefinition][], includeAppName?: boolean, canUseConfigAsJson?: boolean) => string;
@@ -0,0 +1,36 @@
1
+ import { sanitizeGraphqlName } from '../../utils/sanitizeGraphqlName';
2
+ export const configQuery = (list, includeAppName = true, canUseConfigAsJson = true) => {
3
+ const hasQueryList = (list === null || list === void 0 ? void 0 : list.filter(([key, def]) => def.configQuery)) || [];
4
+ if (hasQueryList.length === 0) {
5
+ return canUseConfigAsJson ? 'configAsJson' : '';
6
+ }
7
+ const configsByApp = {};
8
+ hasQueryList
9
+ .forEach((entry) => {
10
+ const nameParts = entry[0].split(':');
11
+ if (nameParts.length === 2) {
12
+ const sanitizedAppName = sanitizeGraphqlName(nameParts[0]);
13
+ let existingConfigs = configsByApp[sanitizedAppName];
14
+ if (!existingConfigs) {
15
+ existingConfigs = [];
16
+ configsByApp[sanitizedAppName] = existingConfigs;
17
+ }
18
+ existingConfigs.push(`${sanitizeGraphqlName(nameParts[1])}${entry[1].configQuery}`);
19
+ }
20
+ });
21
+ // Still query for configAsJson if at least one item has no configQuery defined
22
+ const configAsJsonQuery = canUseConfigAsJson && hasQueryList.length < list.length ? 'configAsJson' : '';
23
+ if (!includeAppName) {
24
+ return `${configAsJsonQuery}
25
+ config {
26
+ ${Object.values(configsByApp).reduce((arr, curr) => arr.concat(curr), []).join('\n')}
27
+ }`;
28
+ }
29
+ else {
30
+ return `${configAsJsonQuery}
31
+ config {
32
+ ${Object.entries(configsByApp).map(entry => entry[0] + '{\n' + entry[1].join('\n') + '\n}')}
33
+ }`;
34
+ }
35
+ };
36
+ //# sourceMappingURL=configQuery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configQuery.js","sourceRoot":"","sources":["../../../src/guillotine/metadata/configQuery.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,mBAAmB,EAAC,MAAM,iCAAiC,CAAC;AAGpE,MAAM,CAAC,MAAM,WAAW,GAAG,CACvB,IAAqC,EACrC,cAAc,GAAG,IAAI,EACrB,kBAAkB,GAAG,IAAI,EACnB,EAAE;IACR,MAAM,YAAY,GAAG,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,KAAI,EAAE,CAAC;IACzE,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,kBAAkB,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;IACpD,CAAC;IAED,MAAM,YAAY,GAA4B,EAAE,CAAC;IACjD,YAAY;SACP,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QACf,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3D,IAAI,eAAe,GAAG,YAAY,CAAC,gBAAgB,CAAC,CAAC;YACrD,IAAI,CAAC,eAAe,EAAE,CAAC;gBACnB,eAAe,GAAG,EAAE,CAAC;gBACrB,YAAY,CAAC,gBAAgB,CAAC,GAAG,eAAe,CAAC;YACrD,CAAC;YACD,eAAe,CAAC,IAAI,CAAC,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QACxF,CAAC;IACL,CAAC,CAAC,CAAC;IAEP,+EAA+E;IAC/E,MAAM,iBAAiB,GAAG,kBAAkB,IAAI,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;IAExG,IAAI,CAAC,cAAc,EAAE,CAAC;QAClB,OAAO,GAAG,iBAAiB;;sBAEb,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;kBACtF,CAAC;IACf,CAAC;SAAM,CAAC;QACJ,OAAO,GAAG,iBAAiB;;sBAEb,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;kBAC7F,CAAC;IACf,CAAC;AACL,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const richTextQuery: (fieldName: string) => string;
@@ -0,0 +1,32 @@
1
+ import { ComponentRegistry } from '../../common/ComponentRegistry';
2
+ import { configQuery } from './configQuery';
3
+ import { indent } from '../../utils/indent';
4
+ const macroConfigQuery = () => {
5
+ return configQuery(ComponentRegistry.getMacros(), false, false);
6
+ };
7
+ export const richTextQuery = (fieldName) => {
8
+ return `${fieldName}(processHtml:{type:absolute, imageWidths:[400, 800, 1200], imageSizes:"(max-width: 400px) 400px, (max-width: 800px) 800px, 1200px"}) {
9
+ processedHtml
10
+ macros {
11
+ ref
12
+ name
13
+ descriptor
14
+ ${indent(macroConfigQuery(), 8)}
15
+ }
16
+ links {
17
+ ref
18
+ media {
19
+ content {
20
+ _id
21
+ }
22
+ }
23
+ }
24
+ images {
25
+ ref
26
+ image {
27
+ _id
28
+ }
29
+ }
30
+ }`;
31
+ };
32
+ //# sourceMappingURL=richTextQuery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"richTextQuery.js","sourceRoot":"","sources":["../../../src/guillotine/metadata/richTextQuery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,iBAAiB,EAAC,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAC,MAAM,EAAC,MAAM,oBAAoB,CAAC;AAG1C,MAAM,gBAAgB,GAAG,GAAW,EAAE;IAClC,OAAO,WAAW,CAAC,iBAAiB,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AACpE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,SAAiB,EAAE,EAAE;IAC/C,OAAO,GAAG,SAAS;;;;;;UAMb,MAAM,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;;;;;;;;;;;;;;;;EAgBrC,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { PathFragment } from '../types';
2
+ export declare function parseComponentPath(contentType: string, path: string): PathFragment[];
@@ -0,0 +1,22 @@
1
+ import { FRAGMENT_CONTENTTYPE_NAME, FRAGMENT_DEFAULT_REGION_NAME, } from '../common/constants';
2
+ export function parseComponentPath(contentType, path) {
3
+ const matches = [];
4
+ let match;
5
+ const myRegexp = /(?:(\w+)\/(\d+))+/g;
6
+ while ((match = myRegexp.exec(path)) !== null) {
7
+ matches.push({
8
+ region: match[1],
9
+ index: +match[2],
10
+ });
11
+ }
12
+ if (contentType === FRAGMENT_CONTENTTYPE_NAME) {
13
+ // there is no main region in fragment content and the root component has '/' path
14
+ // prepend FRAGMENT_DEFAULT_REGION_NAME to path to conform to page structure
15
+ matches.unshift({
16
+ region: FRAGMENT_DEFAULT_REGION_NAME,
17
+ index: 0,
18
+ });
19
+ }
20
+ return matches;
21
+ }
22
+ //# sourceMappingURL=parseComponentPath.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseComponentPath.js","sourceRoot":"","sources":["../../src/guillotine/parseComponentPath.ts"],"names":[],"mappings":"AAGA,OAAO,EACH,yBAAyB,EACzB,4BAA4B,GAC/B,MAAM,qBAAqB,CAAC;AAG7B,MAAM,UAAU,kBAAkB,CAAC,WAAmB,EAAE,IAAY;IAChE,MAAM,OAAO,GAAmB,EAAE,CAAC;IACnC,IAAI,KAAK,CAAC;IACV,MAAM,QAAQ,GAAG,oBAAoB,CAAC;IACtC,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC;YACT,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;YAChB,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;SACnB,CAAC,CAAC;IACP,CAAC;IACD,IAAI,WAAW,KAAK,yBAAyB,EAAE,CAAC;QAC5C,kFAAkF;QAClF,4EAA4E;QAC5E,OAAO,CAAC,OAAO,CAAC;YACZ,MAAM,EAAE,4BAA4B;YACpC,KAAK,EAAE,CAAC;SACX,CAAC,CAAC;IACP,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function prefixLayoutPath(contentType: string, path: string): string;
@@ -0,0 +1,13 @@
1
+ import { FRAGMENT_CONTENTTYPE_NAME, FRAGMENT_DEFAULT_REGION_NAME, } from '../common/constants';
2
+ export function prefixLayoutPath(contentType, path) {
3
+ if (contentType !== FRAGMENT_CONTENTTYPE_NAME) {
4
+ return path;
5
+ }
6
+ else {
7
+ // prepend FRAGMENT_DEFAULT_REGION_NAME to path to conform to page structure
8
+ // so that component with path '/' becomes /FRAGMENT_DEFAULT_REGION_NAME/0
9
+ // path /left/1 becomes /FRAGMENT_DEFAULT_REGION_NAME/0/left/1
10
+ return `/${FRAGMENT_DEFAULT_REGION_NAME}/0${path === '/' ? '' : path}`;
11
+ }
12
+ }
13
+ //# sourceMappingURL=prefixLayoutPath.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefixLayoutPath.js","sourceRoot":"","sources":["../../src/guillotine/prefixLayoutPath.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,yBAAyB,EACzB,4BAA4B,GAC/B,MAAM,qBAAqB,CAAC;AAG7B,MAAM,UAAU,gBAAgB,CAAC,WAAmB,EAAE,IAAY;IAC9D,IAAI,WAAW,KAAK,yBAAyB,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC;IAChB,CAAC;SAAM,CAAC;QACJ,4EAA4E;QAC5E,0EAA0E;QAC1E,8DAA8D;QAC9D,OAAO,IAAI,4BAA4B,KAAK,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3E,CAAC;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { PageComponent } from '../types';
2
+ export declare function processComponentConfig(myAppName: string, myAppNameDashed: string, cmp: PageComponent): void;
@@ -0,0 +1,30 @@
1
+ import { sanitizeGraphqlName } from '../utils/sanitizeGraphqlName';
2
+ export function processComponentConfig(myAppName, myAppNameDashed, cmp) {
3
+ const cmpData = cmp[cmp.type];
4
+ if (cmpData && 'descriptor' in cmpData && cmpData.descriptor) {
5
+ const [appName, cmpName] = cmpData.descriptor.split(':');
6
+ if (appName !== myAppName) {
7
+ return;
8
+ }
9
+ let config;
10
+ const configArray = [];
11
+ if ('configAsJson' in cmpData && cmpData.configAsJson && cmpData.configAsJson[myAppNameDashed]) {
12
+ config = cmpData.configAsJson[myAppNameDashed][cmpName];
13
+ if (config) {
14
+ configArray.push(config);
15
+ delete cmpData.configAsJson;
16
+ }
17
+ }
18
+ const sanitizedAppName = sanitizeGraphqlName(appName);
19
+ if ('config' in cmpData && cmpData.config && cmpData.config[sanitizedAppName]) {
20
+ config = cmpData.config[sanitizedAppName][sanitizeGraphqlName(cmpName)];
21
+ if (config) {
22
+ configArray.push(config);
23
+ }
24
+ }
25
+ if (configArray.length) {
26
+ cmpData.config = Object.assign({}, ...configArray);
27
+ }
28
+ }
29
+ }
30
+ //# sourceMappingURL=processComponentConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processComponentConfig.js","sourceRoot":"","sources":["../../src/guillotine/processComponentConfig.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,mBAAmB,EAAC,MAAM,8BAA8B,CAAC;AAGjE,MAAM,UAAU,sBAAsB,CAClC,SAAiB,EACjB,eAAuB,EACvB,GAAkB;IAElB,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,OAAO,IAAI,YAAY,IAAI,OAAO,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QAC3D,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACzD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO;QACX,CAAC;QACD,IAAI,MAAM,CAAC;QACX,MAAM,WAAW,GAAa,EAAE,CAAC;QACjC,IAAI,cAAc,IAAI,OAAO,IAAI,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,YAAY,CAAC,eAAe,CAAC,EAAE,CAAC;YAC7F,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC;YACxD,IAAI,MAAM,EAAE,CAAC;gBACT,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACzB,OAAO,OAAO,CAAC,YAAY,CAAC;YAChC,CAAC;QACL,CAAC;QACD,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QACtD,IAAI,QAAQ,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC5E,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC;YACxE,IAAI,MAAM,EAAE,CAAC;gBACT,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC7B,CAAC;QACL,CAAC;QACD,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;YACrB,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,WAAW,CAAC,CAAC;QACvD,CAAC;IACL,CAAC;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { PageComponent } from '../types';
2
+ export declare function restrictComponentsToPath(contentType: string, components?: PageComponent[], componentPath?: string): PageComponent[];
@@ -0,0 +1,35 @@
1
+ import { XP_COMPONENT_TYPE } from '../common/constants';
2
+ import { parseComponentPath } from './parseComponentPath';
3
+ export function restrictComponentsToPath(contentType, components, componentPath) {
4
+ if (!componentPath || !(components === null || components === void 0 ? void 0 : components.length)) {
5
+ return components || [];
6
+ }
7
+ // filter components to the requested one only
8
+ const component = components.find(cmp => {
9
+ return cmp.path === componentPath;
10
+ });
11
+ if (!component) {
12
+ return [];
13
+ }
14
+ let result = [component];
15
+ if (component.type !== XP_COMPONENT_TYPE.LAYOUT) {
16
+ // remember to include all parent layouts too !
17
+ const cmpPath = parseComponentPath(contentType, component.path);
18
+ for (let i = cmpPath.length - 2; i >= 0; i--) {
19
+ const parentPath = cmpPath[i];
20
+ const parentCmp = components.find(cmp => cmp.path === `/${parentPath.region}/${parentPath.index}`);
21
+ if (parentCmp) {
22
+ result.unshift(parentCmp);
23
+ }
24
+ }
25
+ }
26
+ else {
27
+ // It's a layout, include child components
28
+ const childCmps = components.filter(cmp => cmp.path !== component.path && cmp.path.startsWith(component.path));
29
+ if (childCmps.length) {
30
+ result = result.concat(childCmps);
31
+ }
32
+ }
33
+ return result;
34
+ }
35
+ //# sourceMappingURL=restrictComponentsToPath.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restrictComponentsToPath.js","sourceRoot":"","sources":["../../src/guillotine/restrictComponentsToPath.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAC;AAGxD,MAAM,UAAU,wBAAwB,CACpC,WAAmB,EACnB,UAA4B,EAC5B,aAAsB;IAEtB,IAAI,CAAC,aAAa,IAAI,CAAC,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,CAAA,EAAE,CAAC;QACxC,OAAO,UAAU,IAAI,EAAE,CAAC;IAC5B,CAAC;IAED,8CAA8C;IAC9C,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;QACpC,OAAO,GAAG,CAAC,IAAI,KAAK,aAAa,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,SAAS,EAAE,CAAC;QACb,OAAO,EAAE,CAAC;IACd,CAAC;IAED,IAAI,MAAM,GAAoB,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAI,SAAS,CAAC,IAAI,KAAK,iBAAiB,CAAC,MAAM,EAAE,CAAC;QAC9C,+CAA+C;QAC/C,MAAM,OAAO,GAAG,kBAAkB,CAAC,WAAW,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QAChE,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC9B,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;YACnG,IAAI,SAAS,EAAE,CAAC;gBACZ,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAC9B,CAAC;QACL,CAAC;IACL,CAAC;SAAM,CAAC;QACJ,0CAA0C;QAC1C,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/G,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACtC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { FetchContentResult } from '../types';
2
+ export declare function validateData(props: FetchContentResult): void;
@@ -0,0 +1,7 @@
1
+ import { validateNotFound } from './validateNotFound';
2
+ import { validateShortcut } from './validateShortcut';
3
+ export function validateData(props) {
4
+ validateNotFound(props);
5
+ validateShortcut(props);
6
+ }
7
+ //# sourceMappingURL=validateData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateData.js","sourceRoot":"","sources":["../../src/guillotine/validateData.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AAGpD,MAAM,UAAU,YAAY,CAAC,KAAyB;IAClD,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACxB,gBAAgB,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { FetchContentResult } from '../types';
2
+ export declare function validateNotFound(props: FetchContentResult): void;
@@ -0,0 +1,16 @@
1
+ import { notFound } from 'next/navigation';
2
+ export function validateNotFound(props) {
3
+ const { error } = props;
4
+ if (error) {
5
+ switch (error.code) {
6
+ case '404':
7
+ console.warn(error.code, error.message);
8
+ notFound();
9
+ break;
10
+ default:
11
+ console.error(error.code, error.message);
12
+ throw new Error(error.message);
13
+ }
14
+ }
15
+ }
16
+ //# sourceMappingURL=validateNotFound.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateNotFound.js","sourceRoot":"","sources":["../../src/guillotine/validateNotFound.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,QAAQ,EAAC,MAAM,iBAAiB,CAAC;AAGzC,MAAM,UAAU,gBAAgB,CAAC,KAAyB;IACtD,MAAM,EAAC,KAAK,EAAC,GAAG,KAAK,CAAC;IACtB,IAAI,KAAK,EAAE,CAAC;QACR,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACjB,KAAK,KAAK;gBACN,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;gBACxC,QAAQ,EAAE,CAAC;gBACX,MAAM;YACV;gBACI,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;gBACzC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACvC,CAAC;IACL,CAAC;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { FetchContentResult } from '../types';
2
+ export declare function validateShortcut(props: FetchContentResult): void;
@@ -0,0 +1,29 @@
1
+ import { notFound, redirect, RedirectType } from 'next/navigation';
2
+ import { RENDER_MODE } from '../common/constants';
3
+ import { IS_DEV_MODE } from '../common/env';
4
+ import { UrlProcessor } from '../common/UrlProcessor';
5
+ export function validateShortcut(props) {
6
+ var _a, _b, _c;
7
+ const { data, meta, error } = props;
8
+ const pageUrl = (_c = (_b = (_a = data === null || data === void 0 ? void 0 : data.get) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.target) === null || _c === void 0 ? void 0 : _c.pageUrl;
9
+ if (meta.type === 'base:shortcut' && pageUrl) {
10
+ if (meta.renderMode !== RENDER_MODE.NEXT) {
11
+ // do not show shortcut targets in preview/edit mode
12
+ console.warn(404, `Shortcuts are not available in ${RENDER_MODE.NEXT} render mode`);
13
+ notFound();
14
+ }
15
+ const destination = UrlProcessor.process(pageUrl, meta, true);
16
+ console.debug(`Redirecting shortcut content [${meta.path}] to`, destination);
17
+ redirect(destination, RedirectType.replace);
18
+ }
19
+ // we can not set 418 for static paths,
20
+ // but we can show 404 instead to be handled in CS
21
+ const canNotRender = meta && !meta.canRender && meta.renderMode !== RENDER_MODE.EDIT;
22
+ const catchAllInNextProdMode = meta.renderMode === RENDER_MODE.NEXT && !IS_DEV_MODE && meta.catchAll;
23
+ const isNotFound = (error && error.code === '404') || canNotRender || catchAllInNextProdMode;
24
+ if (isNotFound) {
25
+ console.warn(404, `Can not render content at [${meta.path}]`);
26
+ notFound();
27
+ }
28
+ }
29
+ //# sourceMappingURL=validateShortcut.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateShortcut.js","sourceRoot":"","sources":["../../src/guillotine/validateShortcut.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAC,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAC,WAAW,EAAC,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAC,YAAY,EAAC,MAAM,wBAAwB,CAAC;AAGpD,MAAM,UAAU,gBAAgB,CAAC,KAAyB;;IACtD,MAAM,EAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAC,GAAG,KAAK,CAAC;IAClC,MAAM,OAAO,GAAG,MAAA,MAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,GAAG,0CAAE,IAAI,0CAAE,MAAM,0CAAE,OAAO,CAAC;IACjD,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,IAAI,OAAO,EAAE,CAAC;QAC3C,IAAI,IAAI,CAAC,UAAU,KAAK,WAAW,CAAC,IAAI,EAAE,CAAC;YACvC,oDAAoD;YACpD,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,kCAAkC,WAAW,CAAC,IAAI,cAAc,CAAC,CAAC;YACpF,QAAQ,EAAE,CAAC;QACf,CAAC;QAED,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAC9D,OAAO,CAAC,KAAK,CAAC,iCAAiC,IAAI,CAAC,IAAI,MAAM,EAAE,WAAW,CAAC,CAAC;QAC7E,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,uCAAuC;IACvC,kDAAkD;IAClD,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,KAAK,WAAW,CAAC,IAAI,CAAC;IAErF,MAAM,sBAAsB,GAAG,IAAI,CAAC,UAAU,KAAK,WAAW,CAAC,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC;IAErG,MAAM,UAAU,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,YAAY,IAAI,sBAAsB,CAAC;IAE7F,IAAI,UAAU,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,8BAA8B,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QAC9D,QAAQ,EAAE,CAAC;IACf,CAAC;AACL,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { LocaleContextType } from '../types';
2
+ import React from 'react';
3
+ export declare const useLocaleContext: () => LocaleContextType;
4
+ export declare const LocaleContextProvider: ({ children, locale: localeProps, }: {
5
+ children: any;
6
+ locale?: string;
7
+ }) => React.JSX.Element;
@@ -0,0 +1,46 @@
1
+ 'use client';
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ import React, { createContext, useContext, useEffect, useState } from 'react';
12
+ import { getPhrase, loadPhrases } from './i18n';
13
+ const LocaleContext = createContext({
14
+ dictionary: {},
15
+ locale: '',
16
+ localize: (key, ...args) => key,
17
+ setLocale: (locale) => Promise.resolve({}),
18
+ });
19
+ export const useLocaleContext = () => useContext(LocaleContext);
20
+ export const LocaleContextProvider = ({ children, locale: localeProps = '', }) => {
21
+ const [currentLocale, setLocaleState] = useState(localeProps);
22
+ const [dictionary, setPhrasesState] = useState({});
23
+ const setLocale = (locale) => __awaiter(void 0, void 0, void 0, function* () {
24
+ setLocaleState(locale);
25
+ return loadPhrases(locale).then((phrases) => {
26
+ setPhrasesState(phrases);
27
+ console.info(`Loaded client-side phrases for locale "${locale}"`);
28
+ return phrases;
29
+ });
30
+ });
31
+ useEffect(() => {
32
+ if (localeProps) {
33
+ void setLocale(localeProps); // void to avoid @typescript-eslint/no-floating-promises
34
+ }
35
+ }, []);
36
+ const localize = (key, ...args) => getPhrase(currentLocale, dictionary, key, ...args);
37
+ return (<LocaleContext.Provider value={{
38
+ setLocale,
39
+ locale: currentLocale,
40
+ dictionary,
41
+ localize,
42
+ }}>
43
+ {children}
44
+ </LocaleContext.Provider>);
45
+ };
46
+ //# sourceMappingURL=LocaleContext.jsx.map