@griddo/cx 11.7.5 → 11.7.6-rc.0

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 (300) hide show
  1. package/README.md +25 -228
  2. package/build/adapters/gatsby/actions/clean.js +10 -0
  3. package/build/adapters/gatsby/actions/clean.js.map +1 -0
  4. package/build/adapters/gatsby/actions/close.js +12 -0
  5. package/build/adapters/gatsby/actions/close.js.map +1 -0
  6. package/build/adapters/gatsby/actions/data.js +18 -0
  7. package/build/adapters/gatsby/actions/data.js.map +1 -0
  8. package/build/adapters/gatsby/actions/healthCheck.js +10 -0
  9. package/build/adapters/gatsby/actions/healthCheck.js.map +1 -0
  10. package/build/adapters/gatsby/actions/init.js +9 -0
  11. package/build/adapters/gatsby/actions/init.js.map +1 -0
  12. package/build/adapters/gatsby/actions/meta.js +14 -0
  13. package/build/adapters/gatsby/actions/meta.js.map +1 -0
  14. package/build/adapters/gatsby/actions/prepare.js +9 -0
  15. package/build/adapters/gatsby/actions/prepare.js.map +1 -0
  16. package/build/adapters/gatsby/actions/relocation.js +15 -0
  17. package/build/adapters/gatsby/actions/relocation.js.map +1 -0
  18. package/build/adapters/gatsby/actions/restore.js +26 -0
  19. package/build/adapters/gatsby/actions/restore.js.map +1 -0
  20. package/build/adapters/gatsby/actions/ssg.js +9 -0
  21. package/build/adapters/gatsby/actions/ssg.js.map +1 -0
  22. package/build/adapters/gatsby/actions/sync.js +50 -0
  23. package/build/adapters/gatsby/actions/sync.js.map +1 -0
  24. package/build/adapters/gatsby/index.js +74 -0
  25. package/build/adapters/gatsby/index.js.map +1 -0
  26. package/build/adapters/gatsby/shared/context.js +25 -0
  27. package/build/adapters/gatsby/shared/context.js.map +1 -0
  28. package/build/adapters/gatsby/shared/extract-assets.js +58 -0
  29. package/build/adapters/gatsby/shared/extract-assets.js.map +1 -0
  30. package/build/adapters/gatsby/shared/gatsby-build.js +49 -0
  31. package/build/adapters/gatsby/shared/gatsby-build.js.map +1 -0
  32. package/build/adapters/gatsby/shared/sync-render.js +208 -0
  33. package/build/adapters/gatsby/shared/sync-render.js.map +1 -0
  34. package/build/adapters/gatsby/shared/types.js +3 -0
  35. package/build/adapters/gatsby/shared/types.js.map +1 -0
  36. package/build/commands/end-render.js +63 -0
  37. package/build/commands/end-render.js.map +1 -0
  38. package/build/commands/prepare-assets-directory.js +32 -0
  39. package/build/commands/prepare-assets-directory.js.map +1 -0
  40. package/build/commands/prepare-domains-render.js +138 -0
  41. package/build/commands/prepare-domains-render.js.map +1 -0
  42. package/build/commands/reset-render.js +22 -0
  43. package/build/commands/reset-render.js.map +1 -0
  44. package/build/commands/start-render.js +35 -0
  45. package/build/commands/start-render.js.map +1 -0
  46. package/build/commands/upload-search-content.js +189 -0
  47. package/build/commands/upload-search-content.js.map +1 -0
  48. package/build/constants/endpoints.js +42 -0
  49. package/build/constants/endpoints.js.map +1 -0
  50. package/build/constants/envs.js +73 -0
  51. package/build/constants/envs.js.map +1 -0
  52. package/build/constants/errors.js +89 -0
  53. package/build/constants/errors.js.map +1 -0
  54. package/build/exporter/adapters/gatsby/actions/clean.d.ts +3 -0
  55. package/build/exporter/adapters/gatsby/actions/close.d.ts +3 -0
  56. package/build/exporter/adapters/gatsby/actions/data.d.ts +2 -0
  57. package/build/exporter/adapters/gatsby/actions/healthCheck.d.ts +2 -0
  58. package/build/exporter/adapters/gatsby/actions/init.d.ts +2 -0
  59. package/build/exporter/adapters/gatsby/actions/meta.d.ts +2 -0
  60. package/build/exporter/adapters/gatsby/actions/prepare.d.ts +2 -0
  61. package/build/exporter/adapters/gatsby/actions/relocation.d.ts +2 -0
  62. package/build/exporter/adapters/gatsby/actions/restore.d.ts +3 -0
  63. package/build/exporter/adapters/gatsby/actions/ssg.d.ts +3 -0
  64. package/build/exporter/adapters/gatsby/actions/sync.d.ts +3 -0
  65. package/build/exporter/adapters/gatsby/index.d.ts +9 -0
  66. package/build/exporter/adapters/gatsby/shared/context.d.ts +38 -0
  67. package/build/exporter/adapters/gatsby/shared/extract-assets.d.ts +7 -0
  68. package/build/exporter/adapters/gatsby/shared/gatsby-build.d.ts +7 -0
  69. package/build/exporter/adapters/gatsby/shared/sync-render.d.ts +36 -0
  70. package/build/exporter/adapters/gatsby/shared/types.d.ts +34 -0
  71. package/build/exporter/commands/start-render.d.ts +2 -0
  72. package/build/exporter/commands/upload-search-content.d.ts +2 -0
  73. package/build/{constants → exporter/constants}/envs.d.ts +1 -7
  74. package/build/{errors/errors-data.d.ts → exporter/constants/errors.d.ts} +5 -3
  75. package/build/{services → exporter/services}/auth.d.ts +1 -1
  76. package/build/exporter/services/db.d.ts +4 -0
  77. package/build/{services → exporter/services}/robots.d.ts +0 -6
  78. package/build/{services → exporter/services}/sites.d.ts +5 -2
  79. package/build/exporter/services/store.d.ts +15 -0
  80. package/build/{types → exporter/types}/api.d.ts +3 -4
  81. package/build/{types → exporter/types}/global.d.ts +6 -6
  82. package/build/{types → exporter/types}/navigation.d.ts +1 -1
  83. package/build/exporter/types/render.d.ts +50 -0
  84. package/build/{types → exporter/types}/sites.d.ts +1 -2
  85. package/build/exporter/utils/artifacts.d.ts +6 -0
  86. package/build/exporter/utils/brush.d.ts +18 -0
  87. package/build/{utils → exporter/utils}/cache.d.ts +7 -12
  88. package/build/{utils/health-checks.d.ts → exporter/utils/check-health.d.ts} +2 -2
  89. package/build/exporter/utils/core-utils.d.ts +77 -0
  90. package/build/{utils → exporter/utils}/domains.d.ts +1 -1
  91. package/build/{errors/index.d.ts → exporter/utils/errors.d.ts} +3 -3
  92. package/build/exporter/utils/folders.d.ts +66 -0
  93. package/build/{utils → exporter/utils}/loggin.d.ts +2 -16
  94. package/build/{utils → exporter/utils}/pages.d.ts +2 -2
  95. package/build/exporter/utils/render.d.ts +49 -0
  96. package/build/{utils → exporter/utils}/sites.d.ts +3 -3
  97. package/build/{utils → exporter/utils}/store.d.ts +10 -38
  98. package/build/services/auth.js +39 -0
  99. package/build/services/auth.js.map +1 -0
  100. package/build/services/db.js +34 -0
  101. package/build/services/db.js.map +1 -0
  102. package/build/services/navigation.js +93 -0
  103. package/build/services/navigation.js.map +1 -0
  104. package/build/services/reference-fields.js +131 -0
  105. package/build/services/reference-fields.js.map +1 -0
  106. package/build/services/robots.js +58 -0
  107. package/build/services/robots.js.map +1 -0
  108. package/build/services/sites.js +109 -0
  109. package/build/services/sites.js.map +1 -0
  110. package/build/services/store.js +282 -0
  111. package/build/services/store.js.map +1 -0
  112. package/build/types/api.js +3 -0
  113. package/build/types/api.js.map +1 -0
  114. package/build/types/global.js +3 -0
  115. package/build/types/global.js.map +1 -0
  116. package/build/types/navigation.js +3 -0
  117. package/build/types/navigation.js.map +1 -0
  118. package/build/types/pages.js +3 -0
  119. package/build/types/pages.js.map +1 -0
  120. package/build/types/render.js +10 -0
  121. package/build/types/render.js.map +1 -0
  122. package/build/types/sites.js +3 -0
  123. package/build/types/sites.js.map +1 -0
  124. package/build/types/templates.js +3 -0
  125. package/build/types/templates.js.map +1 -0
  126. package/build/utils/api.js +161 -0
  127. package/build/utils/api.js.map +1 -0
  128. package/build/utils/artifacts.js +34 -0
  129. package/build/utils/artifacts.js.map +1 -0
  130. package/build/utils/brush.js +30 -0
  131. package/build/utils/brush.js.map +1 -0
  132. package/build/utils/cache.js +106 -0
  133. package/build/utils/cache.js.map +1 -0
  134. package/build/utils/check-health.js +68 -0
  135. package/build/utils/check-health.js.map +1 -0
  136. package/build/utils/core-utils.js +251 -0
  137. package/build/utils/core-utils.js.map +1 -0
  138. package/build/utils/domains.js +37 -0
  139. package/build/utils/domains.js.map +1 -0
  140. package/build/utils/errors.js +30 -0
  141. package/build/utils/errors.js.map +1 -0
  142. package/build/utils/folders.js +339 -0
  143. package/build/utils/folders.js.map +1 -0
  144. package/build/utils/images.js +45 -0
  145. package/build/utils/images.js.map +1 -0
  146. package/build/utils/instance.js +66 -0
  147. package/build/utils/instance.js.map +1 -0
  148. package/build/utils/loggin.js +102 -0
  149. package/build/utils/loggin.js.map +1 -0
  150. package/build/utils/pages.js +359 -0
  151. package/build/utils/pages.js.map +1 -0
  152. package/build/utils/render.js +144 -0
  153. package/build/utils/render.js.map +1 -0
  154. package/build/utils/sites.js +239 -0
  155. package/build/utils/sites.js.map +1 -0
  156. package/build/utils/store.js +193 -0
  157. package/build/utils/store.js.map +1 -0
  158. package/exporter/adapters/gatsby/actions/clean.ts +14 -0
  159. package/exporter/adapters/gatsby/actions/close.ts +17 -0
  160. package/exporter/adapters/gatsby/actions/data.ts +25 -0
  161. package/exporter/adapters/gatsby/actions/healthCheck.ts +10 -0
  162. package/exporter/adapters/gatsby/actions/init.ts +12 -0
  163. package/exporter/adapters/gatsby/actions/meta.ts +18 -0
  164. package/exporter/adapters/gatsby/actions/prepare.ts +9 -0
  165. package/exporter/adapters/gatsby/actions/relocation.ts +15 -0
  166. package/exporter/adapters/gatsby/actions/restore.ts +36 -0
  167. package/exporter/adapters/gatsby/actions/ssg.ts +12 -0
  168. package/exporter/adapters/gatsby/actions/sync.ts +70 -0
  169. package/exporter/adapters/gatsby/index.ts +60 -146
  170. package/exporter/adapters/gatsby/shared/context.ts +50 -0
  171. package/exporter/adapters/gatsby/shared/extract-assets.ts +61 -0
  172. package/exporter/adapters/gatsby/shared/gatsby-build.ts +54 -0
  173. package/exporter/adapters/gatsby/shared/sync-render.ts +294 -0
  174. package/exporter/adapters/gatsby/shared/types.ts +35 -0
  175. package/exporter/build-esbuild.noop +42 -0
  176. package/exporter/build.sh +5 -38
  177. package/exporter/commands/end-render.ts +56 -81
  178. package/exporter/commands/prepare-assets-directory.ts +33 -0
  179. package/exporter/commands/prepare-domains-render.ts +149 -31
  180. package/exporter/commands/reset-render.ts +12 -3
  181. package/exporter/commands/start-render.ts +18 -47
  182. package/exporter/commands/upload-search-content.ts +206 -21
  183. package/exporter/constants/envs.ts +59 -51
  184. package/exporter/{errors/errors-data.ts → constants/errors.ts} +24 -15
  185. package/exporter/services/auth.ts +7 -6
  186. package/exporter/services/db.ts +32 -0
  187. package/exporter/services/navigation.ts +4 -10
  188. package/exporter/services/reference-fields.ts +8 -23
  189. package/exporter/services/robots.ts +8 -15
  190. package/exporter/services/sites.ts +35 -24
  191. package/exporter/services/store.ts +118 -76
  192. package/exporter/types/api.ts +24 -27
  193. package/exporter/types/global.ts +8 -10
  194. package/exporter/types/navigation.ts +1 -1
  195. package/exporter/types/pages.ts +2 -3
  196. package/exporter/types/render.ts +59 -0
  197. package/exporter/types/sites.ts +1 -2
  198. package/exporter/utils/api.ts +46 -82
  199. package/exporter/{artifacts/index.ts → utils/artifacts.ts} +9 -8
  200. package/exporter/utils/brush.ts +34 -0
  201. package/exporter/utils/cache.ts +34 -59
  202. package/exporter/utils/check-health.ts +79 -0
  203. package/exporter/utils/core-utils.ts +86 -247
  204. package/exporter/utils/domains.ts +10 -7
  205. package/exporter/{errors/index.ts → utils/errors.ts} +10 -9
  206. package/exporter/utils/folders.ts +161 -92
  207. package/exporter/utils/images.ts +1 -6
  208. package/exporter/utils/instance.ts +9 -12
  209. package/exporter/utils/loggin.ts +24 -89
  210. package/exporter/utils/pages.ts +23 -88
  211. package/exporter/utils/render.ts +147 -48
  212. package/exporter/utils/sites.ts +67 -77
  213. package/exporter/utils/store.ts +85 -178
  214. package/gatsby-browser.tsx +41 -58
  215. package/gatsby-config.ts +6 -12
  216. package/gatsby-node.ts +30 -89
  217. package/gatsby-ssr.tsx +2 -1
  218. package/package.json +32 -73
  219. package/plugins/gatsby-plugin-svgr-loader/gatsby-node.js +55 -0
  220. package/plugins/gatsby-plugin-svgr-loader/package.json +8 -0
  221. package/{exporter/react → react}/Favicon/index.tsx +1 -7
  222. package/{exporter/react → react}/GriddoIntegrations/index.tsx +6 -14
  223. package/{exporter/react → react}/GriddoIntegrations/utils.ts +4 -9
  224. package/{build/react/index.d.ts → react/index.tsx} +1 -0
  225. package/src/components/Head.tsx +13 -46
  226. package/src/components/template.tsx +8 -30
  227. package/src/gatsby-node-utils.ts +91 -2
  228. package/src/html.tsx +2 -11
  229. package/src/types.ts +5 -5
  230. package/start-render.js +1 -3
  231. package/tsconfig.json +3 -2
  232. package/build/adapters/gatsby/index.d.ts +0 -4
  233. package/build/adapters/gatsby/utils.d.ts +0 -22
  234. package/build/artifacts/index.d.ts +0 -6
  235. package/build/commands/move-assets.d.ts +0 -1
  236. package/build/commands/prepare-domains-render.d.ts +0 -1
  237. package/build/constants/index.d.ts +0 -57
  238. package/build/end-render.js +0 -74
  239. package/build/end-render.js.map +0 -7
  240. package/build/index.d.ts +0 -29
  241. package/build/index.js +0 -73
  242. package/build/index.js.map +0 -7
  243. package/build/prepare-domains-render.js +0 -73
  244. package/build/prepare-domains-render.js.map +0 -7
  245. package/build/react/Favicon/index.d.ts +0 -5
  246. package/build/react/Favicon/utils.d.ts +0 -9
  247. package/build/react/GriddoIntegrations/index.d.ts +0 -20
  248. package/build/react/GriddoIntegrations/utils.d.ts +0 -26
  249. package/build/react/index.js +0 -3
  250. package/build/registers/api.d.ts +0 -9
  251. package/build/registers/gatsby.d.ts +0 -9
  252. package/build/registers/index.d.ts +0 -3
  253. package/build/reset-render.js +0 -74
  254. package/build/reset-render.js.map +0 -7
  255. package/build/services/domains.d.ts +0 -6
  256. package/build/services/register.d.ts +0 -36
  257. package/build/services/settings.d.ts +0 -4
  258. package/build/services/store.d.ts +0 -6
  259. package/build/start-render.js +0 -100
  260. package/build/start-render.js.map +0 -7
  261. package/build/upload-search-content.js +0 -74
  262. package/build/upload-search-content.js.map +0 -7
  263. package/build/utils/alerts.d.ts +0 -3
  264. package/build/utils/core-utils.d.ts +0 -107
  265. package/build/utils/create-build-data.d.ts +0 -8
  266. package/build/utils/folders.d.ts +0 -53
  267. package/build/utils/render.d.ts +0 -13
  268. package/build/utils/searches.d.ts +0 -15
  269. package/cx.config.d.ts +0 -5
  270. package/cx.config.js +0 -36
  271. package/exporter/adapters/gatsby/utils.ts +0 -161
  272. package/exporter/artifacts/README.md +0 -34
  273. package/exporter/commands/move-assets.ts +0 -11
  274. package/exporter/constants/index.ts +0 -129
  275. package/exporter/index.ts +0 -82
  276. package/exporter/react/index.tsx +0 -11
  277. package/exporter/registers/api.ts +0 -14
  278. package/exporter/registers/gatsby.ts +0 -14
  279. package/exporter/registers/index.ts +0 -4
  280. package/exporter/services/domains.ts +0 -16
  281. package/exporter/services/register.ts +0 -113
  282. package/exporter/services/settings.ts +0 -17
  283. package/exporter/utils/alerts.ts +0 -29
  284. package/exporter/utils/create-build-data.ts +0 -17
  285. package/exporter/utils/health-checks.ts +0 -64
  286. package/exporter/utils/searches.ts +0 -179
  287. package/src/README.md +0 -7
  288. package/build/{commands → exporter/commands}/end-render.d.ts +0 -0
  289. package/build/{commands/reset-render.d.ts → exporter/commands/prepare-assets-directory.d.ts} +0 -0
  290. package/build/{commands/start-render.d.ts → exporter/commands/prepare-domains-render.d.ts} +0 -0
  291. package/build/{commands/upload-search-content.d.ts → exporter/commands/reset-render.d.ts} +0 -0
  292. package/build/{constants → exporter/constants}/endpoints.d.ts +0 -0
  293. package/build/{services → exporter/services}/navigation.d.ts +0 -0
  294. package/build/{services → exporter/services}/reference-fields.d.ts +0 -0
  295. package/build/{types → exporter/types}/pages.d.ts +1 -1
  296. /package/build/{types → exporter/types}/templates.d.ts +0 -0
  297. /package/build/{utils → exporter/utils}/api.d.ts +0 -0
  298. /package/build/{utils → exporter/utils}/images.d.ts +0 -0
  299. /package/build/{utils → exporter/utils}/instance.d.ts +0 -0
  300. /package/{exporter/react → react}/Favicon/utils.ts +0 -0
@@ -0,0 +1,359 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createGriddoListPages = createGriddoListPages;
4
+ exports.createGriddoMultiPages = createGriddoMultiPages;
5
+ exports.createGriddoSinglePage = createGriddoSinglePage;
6
+ exports.getMultiPageElements = getMultiPageElements;
7
+ exports.getPaginatedPages = getPaginatedPages;
8
+ const images_1 = require("./images");
9
+ // Consts
10
+ const DEFAULT_ITEMS_PER_PAGE_FOR_LIST_TEMPLATES = 25;
11
+ /**
12
+ * Return an OpenGraph object.
13
+ *
14
+ * @param props.socialTitle The social title.
15
+ * @param props.socialDescription The social description.
16
+ * @param props.socialImage The social image in Cloudinary or DAM url format.
17
+ */
18
+ function getOpenGraph({ socialTitle, socialDescription, socialImage, }) {
19
+ return {
20
+ type: "website",
21
+ title: socialTitle,
22
+ description: socialDescription,
23
+ image: socialImage ? (0, images_1.formatImage)(socialImage, 1280, 768) : "",
24
+ twitterImage: socialImage ? (0, images_1.formatImage)(socialImage, 1280, 768) : "",
25
+ };
26
+ }
27
+ /**
28
+ * Get the Page metadata object from a page Object.
29
+ *
30
+ * @param params A Page object
31
+ */
32
+ function getPageMetadata(params) {
33
+ const { title, metaTitle, metaDescription, canonicalURL, locale, url, isIndexed, follow, metasAdvanced, pageLanguages, fullUrl, metaKeywords, } = params;
34
+ const metasAdvancedList = metasAdvanced
35
+ ?.split(",")
36
+ .filter(Boolean)
37
+ .map((item) => item.trim().toLowerCase()) || [];
38
+ return {
39
+ title: (metaTitle || title || "").trim(),
40
+ description: metaDescription,
41
+ canonical: canonicalURL?.trim() && canonicalURL !== fullUrl
42
+ ? canonicalURL.trim()
43
+ : isIndexed
44
+ ? fullUrl
45
+ : undefined,
46
+ locale,
47
+ url,
48
+ index: isIndexed ? "index" : "noindex",
49
+ follow: follow ? "follow" : "nofollow",
50
+ translate: metasAdvancedList.includes("notranslate") ? "notranslate" : "",
51
+ metasAdvanced: metasAdvancedList.filter((item) => item !== "notranslate").join(),
52
+ pageLanguages,
53
+ metaKeywords: metaKeywords
54
+ ?.filter(Boolean)
55
+ .map((keyword) => keyword.replace(/"/g, "'"))
56
+ .join(", "),
57
+ };
58
+ }
59
+ /**
60
+ * Create a Griddo page object
61
+ *
62
+ * @param page A page object ready to pass as content of the `context` to use in the React template.
63
+ * @param additionalInfo Additional page info to pass as content of `context` to use in the React template.
64
+ * @param excludeFromSearch Boolean to avoid this page to be indexed in internal search tool.
65
+ */
66
+ async function createGriddoPageObject(page, additionalInfo) {
67
+ // Extract some props from page
68
+ const { id, title, fullPath, language: languageId, breadcrumb, socialDescription, socialImage, socialTitle, } = page;
69
+ // Extract some props from additionalInfo
70
+ const { baseUrl, cloudinaryName, griddoVersion, siteLangs, siteMetadata, siteOptions, siteScript, siteSlug, socials, theme, navigations, } = additionalInfo;
71
+ const { header, footer } = navigations;
72
+ // Update page object
73
+ page.breadcrumb = breadcrumb;
74
+ page.siteSlug = siteSlug;
75
+ page.apiUrl = baseUrl;
76
+ page.publicApiUrl = additionalInfo.publicBaseUrl;
77
+ page.instance = additionalInfo.instance;
78
+ const foundLanguage = siteLangs.find(({ id }) => id === page?.language);
79
+ const locale = foundLanguage?.locale.replace(/_/g, "-");
80
+ // Page Metadata
81
+ const pageMetadata = getPageMetadata(page);
82
+ // Opengraph
83
+ const openGraph = getOpenGraph({
84
+ socialDescription,
85
+ socialImage,
86
+ socialTitle,
87
+ });
88
+ const pagePath = fullPath.compose;
89
+ const renderDate = new Date().toString();
90
+ const griddoPageObject = {
91
+ path: pagePath,
92
+ size: undefined,
93
+ context: {
94
+ // Page
95
+ id,
96
+ title,
97
+ fullPath,
98
+ locale,
99
+ languageId,
100
+ theme,
101
+ // PARA <Helmet />
102
+ siteMetadata,
103
+ pageMetadata,
104
+ openGraph,
105
+ socials,
106
+ siteLangs,
107
+ cloudinaryName,
108
+ siteOptions,
109
+ griddoVersion,
110
+ renderDate,
111
+ siteScript,
112
+ // Navigation sections
113
+ header,
114
+ footer,
115
+ // Page template
116
+ // En este objeto se está pasando todos los metadatos que vienen en
117
+ // el primer nivel pero el uso de los mismos en CX se hace con la
118
+ // prop `pageMetadata` creada a partir de getPageMetadata. En
119
+ // resumen, se está pasando por duplicado el contenido.
120
+ // TODO: Eliminar las claves de metadata de este objeto page.
121
+ page,
122
+ },
123
+ };
124
+ return griddoPageObject;
125
+ }
126
+ /**
127
+ * Create a single Griddo page object.
128
+ *
129
+ * @param page A Griddo single page object.
130
+ * @param additionalInfo Additional page info.
131
+ */
132
+ async function createGriddoSinglePage(page, additionalInfo) {
133
+ return createGriddoPageObject(page, additionalInfo);
134
+ }
135
+ /**
136
+ * Create multiples pages from one page as list paginated pages
137
+ */
138
+ async function createGriddoListPages({ page, pages, isRoot = false, defaultLang, template, totalQueriedItems }, additionalInfo) {
139
+ const allPages = pages.map(async (dataInPage, idx) => {
140
+ const isFirstPage = idx === 0;
141
+ const pageNumber = idx + 1;
142
+ const { domainUrl, compose } = page.fullPath;
143
+ const paginatedPage = {
144
+ ...page,
145
+ fullPath: {
146
+ ...page.fullPath,
147
+ // Add a page number (tailPageNumber) from page 2 onwards
148
+ compose: addPageNumberToUrl(compose, pageNumber, {
149
+ addEndingSlash: true,
150
+ }),
151
+ },
152
+ fullUrl: addPageNumberToUrl(page.fullUrl, pageNumber, {
153
+ addEndingSlash: true,
154
+ }),
155
+ slug: addPageNumberToUrl(page.slug, pageNumber),
156
+ title: addPageNumberToTitle(page.title, pageNumber),
157
+ metaTitle: addPageNumberToTitle(page.metaTitle || "", pageNumber),
158
+ disableHrefLangs: pageNumber > 1,
159
+ template: {
160
+ ...template,
161
+ isFirstPage,
162
+ pageNumber,
163
+ totalPages: pages.length,
164
+ // The base link, without page number to use in <Pagination />
165
+ // component.
166
+ baseLink: `${domainUrl}${compose}`,
167
+ queriedItems: dataInPage,
168
+ totalQueriedItems: totalQueriedItems?.length,
169
+ },
170
+ isRoot,
171
+ defaultLang,
172
+ };
173
+ return createGriddoPageObject(paginatedPage, additionalInfo);
174
+ });
175
+ return Promise.all(allPages);
176
+ }
177
+ /**
178
+ * Create multiples pages from a MultiPage module
179
+ *
180
+ * @param page A Griddo Multipage object.
181
+ * @param additionalInfo Additional page info.
182
+ */
183
+ function createGriddoMultiPages(page, additionalInfo) {
184
+ const { multiPageElements: multiPageElementsBulk, ...cleanPage } = page;
185
+ // TODO: Use structuredClone() when node 18 is available.
186
+ // WARN!! Se ha probado que parse(stringify()) está tan optimizado que puede ser más rápido que structuredClone...
187
+ const multiPageElements = JSON.parse(JSON.stringify(multiPageElementsBulk));
188
+ // Si no hay un elemento sin slug, como mínimo hay que dibujar una página
189
+ // principal para el conjunto de páginas.
190
+ if (!multiPageElements.find(({ sectionSlug }) => sectionSlug === "/")) {
191
+ multiPageElements.push({});
192
+ }
193
+ // Creates each page based on `multiPageElements` from the schema.
194
+ const allPages = multiPageElements.map(async (pageElement) => {
195
+ // TODO: Use structuredClone() when node 18 is available.
196
+ // WARN!! Se ha probado que parse(stringify()) está tan optimizado que puede ser más rápido que structuredClone...
197
+ const paginatedPage = JSON.parse(JSON.stringify(cleanPage));
198
+ const { sectionSlug = "/", title: bulkTitle = "", metaTitle = "", metaDescription = "", } = pageElement;
199
+ const title = typeof bulkTitle === "string" ? bulkTitle : bulkTitle.content;
200
+ const compose = paginatedPage.fullPath.compose || "";
201
+ const fullUrl = paginatedPage.fullUrl.endsWith("/")
202
+ ? paginatedPage.fullUrl.slice(0, -1)
203
+ : paginatedPage.fullUrl;
204
+ const cleanSectionSlug = sectionSlug?.replace(/\//g, "");
205
+ const isRootSlug = sectionSlug === "/";
206
+ const rightSectionSlug = isRootSlug ? cleanSectionSlug : `${cleanSectionSlug}/`;
207
+ const slash = compose.endsWith("/") ? "" : "/";
208
+ const newCompose = `${compose}${slash}${rightSectionSlug}`;
209
+ if (title.trim()) {
210
+ paginatedPage.title = title;
211
+ }
212
+ if (metaDescription.trim()) {
213
+ paginatedPage.metaDescription = metaDescription;
214
+ }
215
+ paginatedPage.fullUrl = `${fullUrl}/${rightSectionSlug}`;
216
+ paginatedPage.fullPath.compose = newCompose;
217
+ paginatedPage.slug = newCompose;
218
+ paginatedPage.template.activeSectionSlug = sectionSlug;
219
+ paginatedPage.template.activeSectionBase = fullUrl;
220
+ paginatedPage.metaTitle = metaTitle.trim() || title.trim() || paginatedPage.metaTitle;
221
+ return createGriddoPageObject(paginatedPage, additionalInfo);
222
+ });
223
+ return Promise.all(allPages);
224
+ }
225
+ /**
226
+ * Get the multi pages elements.
227
+ *
228
+ * @param page The page to get the multipage parts.
229
+ */
230
+ function getMultiPageElements(page) {
231
+ const multiPageElements = new Promise((resolve) => {
232
+ // Recursive
233
+ const getMultiPageComponent = (
234
+ // No puede ser Core.Page['template'] porque a medida que va bajando en
235
+ // el árbol ya no es la estructura de un template.
236
+ template, level = 0) => {
237
+ // If it doesn't have a "template strcuture"
238
+ if (!template || typeof template !== "object") {
239
+ return;
240
+ }
241
+ // For each prop in the "template"
242
+ for (const key in template) {
243
+ const currentComponent = template[key];
244
+ const isValidComponent = currentComponent || typeof currentComponent === "object";
245
+ const hasGriddoMultiPageProp = JSON.stringify(currentComponent).includes('"hasGriddoMultiPage":true');
246
+ if (!isValidComponent) {
247
+ continue;
248
+ }
249
+ if (!hasGriddoMultiPageProp) {
250
+ continue;
251
+ }
252
+ const { component, hasGriddoMultiPage, elements } = currentComponent;
253
+ if (component && hasGriddoMultiPage) {
254
+ resolve(elements || []);
255
+ }
256
+ // Recursive call
257
+ getMultiPageComponent(currentComponent, level + 1);
258
+ }
259
+ // resolve promise when...
260
+ if (!level) {
261
+ resolve(null);
262
+ }
263
+ };
264
+ // `page` en un array para que también revise la propia template como objeto.
265
+ // @ts-expect-error remove the array
266
+ getMultiPageComponent([page]);
267
+ });
268
+ return multiPageElements;
269
+ }
270
+ // -----------------------------------------------------------------------------
271
+ // Private functions
272
+ // -----------------------------------------------------------------------------
273
+ /**
274
+ * Get `itemsPerPage` elements from the `items` using as offset `page` number.
275
+ * It's a kind of paginator for an array.
276
+ *
277
+ * @param itemsPerPage The items per page.
278
+ * @param items An array of items, the queriedData.
279
+ * @param page The page to be returned.
280
+ *
281
+ * @example
282
+ * getPage(3, ["a", "b", "c", "d", "e", "f", "g", "h"], 2)
283
+ * // -> ["d", "e", "f"]
284
+ */
285
+ function getPage(itemsPerPage, items, page) {
286
+ return items?.slice(itemsPerPage * (page - 1), itemsPerPage * page);
287
+ }
288
+ /**
289
+ * Takes an array of items and split it grouping in arrays of pages based on `itemsPerPage`.
290
+ *
291
+ * @param itemsPerPage The items per page.
292
+ * @param items An array of items, the queriedData.
293
+ *
294
+ * @example
295
+ * getPageCluster(3, ["a", "b", "c", "d", "e", "f", "g", "h"])
296
+ * // -> [["a", "b", "c"], ["d", "e", "f"], ["g", "h"]]
297
+ */
298
+ function getPageCluster(itemsPerPage, items) {
299
+ const totalPagesCount = Math.ceil(items.length / itemsPerPage) || 1;
300
+ const pageNumbers = Array.from({ length: totalPagesCount }, (_, i) => i + 1);
301
+ return pageNumbers?.map((pageNumber) => getPage(itemsPerPage, items, pageNumber));
302
+ }
303
+ /**
304
+ * Takes a template object and split the whole queriedItems into separated queriedItems to use in Griddo static list templates.
305
+ *
306
+ * @param listTemplate A template schema with the ReferenceField data included.
307
+ */
308
+ function getPaginatedPages(listTemplate) {
309
+ const items = listTemplate.queriedItems || [];
310
+ const itemsPerPage = listTemplate?.itemsPerPage || DEFAULT_ITEMS_PER_PAGE_FOR_LIST_TEMPLATES;
311
+ const pageClusters = getPageCluster(itemsPerPage, items);
312
+ return pageClusters;
313
+ }
314
+ /**
315
+ * Remove duplicate ending trailing character from a string
316
+ *
317
+ * @param url the strin url
318
+ * @example
319
+ * removeDuplicateTrailingSlash('http://griddo.com/foo/bar//')
320
+ * // -> http://griddo.com/foo/bar/
321
+ */
322
+ function removeDuplicateTrailing(url) {
323
+ return url.replace(/\/+$/, "/");
324
+ }
325
+ /**
326
+ * Adds a number to an URL adding optionally an ending slash.
327
+ *
328
+ * @param url The url.
329
+ * @param pageNumber A number to be added to the url.
330
+ * @param options.addEndingSlash Boolean that indicates if return the final url with an end slash or not.
331
+ *
332
+ * @example
333
+ * addPageNumberToUrl("web.com", 3) // "web.com/3"
334
+ * addPageNumberToUrl("web.com", 3, { addEndingSlash: true }) // "web.com/3/"
335
+ */
336
+ function addPageNumberToUrl(url, pageNumber, options) {
337
+ const trailingSlash = url.endsWith("/") ? "" : "/";
338
+ const endingSlash = options?.addEndingSlash ? "/" : "";
339
+ if (pageNumber <= 1) {
340
+ return removeDuplicateTrailing(`${url}${endingSlash}`);
341
+ }
342
+ return removeDuplicateTrailing(`${url}${trailingSlash}${pageNumber}${endingSlash}`);
343
+ }
344
+ /**
345
+ * Adds a number to an string with the format "string - number"
346
+ *
347
+ * @param title The title
348
+ * @param pageNumber A number to be added to the title.
349
+ *
350
+ * @example
351
+ * addPageNumberToTitle("The page", 3) // "The page - 3"
352
+ */
353
+ function addPageNumberToTitle(title, pageNumber) {
354
+ if (!title || pageNumber <= 1) {
355
+ return title;
356
+ }
357
+ return `${title} - ${pageNumber}`;
358
+ }
359
+ //# sourceMappingURL=pages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pages.js","sourceRoot":"","sources":["../../exporter/utils/pages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,144 @@
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.assertRenderIsValid = assertRenderIsValid;
7
+ exports.getRenderMetadataFromDB = getRenderMetadataFromDB;
8
+ exports.getRenderMode = getRenderMode;
9
+ exports.getRenderPathsFromDB = getRenderPathsFromDB;
10
+ exports.markRenderAsCompleted = markRenderAsCompleted;
11
+ exports.markRenderAsStarted = markRenderAsStarted;
12
+ exports.resolveDomainRenderMode = resolveDomainRenderMode;
13
+ exports.updateCommitFile = updateCommitFile;
14
+ const node_child_process_1 = require("node:child_process");
15
+ const promises_1 = __importDefault(require("node:fs/promises"));
16
+ const node_path_1 = __importDefault(require("node:path"));
17
+ const errors_1 = require("../constants/errors");
18
+ const db_1 = require("../services/db");
19
+ const render_1 = require("../types/render");
20
+ const errors_2 = require("./errors");
21
+ const folders_1 = require("./folders");
22
+ /**
23
+ * Creates a sentinel file with the current date and time.
24
+ * This file is used to track later if node_modules/@griddo/cx was cleaned by a
25
+ * npm install coming from a deploy.
26
+ */
27
+ async function markRenderAsStarted(options) {
28
+ const { domain } = options;
29
+ const db = await (0, db_1.readDB)();
30
+ db.domains[domain].isRendering = true;
31
+ await (0, db_1.writeDB)(db);
32
+ // Creamos un archivo centinela, si al terminar el render este archivo no
33
+ // existe es que ha habido un deploy por medio y hay que invalidar el render
34
+ const { __ssg } = await getRenderPathsFromDB();
35
+ const renderSentinelFile = node_path_1.default.join(__ssg, ".render-sentinel");
36
+ await promises_1.default.writeFile(renderSentinelFile, new Date().toISOString());
37
+ }
38
+ async function markRenderAsCompleted(domain) {
39
+ const db = await (0, db_1.readDB)();
40
+ db.domains[domain].isRendering = false;
41
+ // db.domains[domain].renderMode = undefined;
42
+ // db.domains[domain].shouldBeRendered = false;
43
+ await (0, db_1.writeDB)(db);
44
+ // Borramos finalmente el archivo centinela
45
+ const { __ssg } = await getRenderPathsFromDB();
46
+ const renderSentinelFile = node_path_1.default.join(__ssg, ".render-sentinel");
47
+ await promises_1.default.unlink(renderSentinelFile);
48
+ }
49
+ async function assertRenderIsValid() {
50
+ // Comprobamos que .render-sentinel exista, si no es que un deploy lo borro
51
+ // y hay que invalidar el render.
52
+ const { __ssg } = await getRenderPathsFromDB();
53
+ const renderSentinelFile = node_path_1.default.join(__ssg, ".render-sentinel");
54
+ if (!(await (0, folders_1.pathExists)(renderSentinelFile))) {
55
+ (0, errors_2.throwError)(errors_1.RenderUUIDError);
56
+ }
57
+ }
58
+ // @todo add more messages...
59
+ async function resolveDomainRenderMode(options) {
60
+ const { domain, shouldBeRendered } = options;
61
+ const { __cache, __exports } = await getRenderPathsFromDB({ domain });
62
+ // missing exports
63
+ const missingExports = !(await (0, folders_1.pathExists)(node_path_1.default.join(__exports)));
64
+ // render with errors
65
+ const db = await (0, db_1.readDB)();
66
+ const wasRenderWithError = db.domains[domain]?.isRendering;
67
+ // new deploy or machine
68
+ const isNewDeploy = await hasNewCommit(__cache);
69
+ if (missingExports) {
70
+ console.log("[!] From Scratch due to missing exports (first render)");
71
+ return {
72
+ renderMode: render_1.RENDER_MODE.FROM_SCRATCH,
73
+ reason: "Missing exports directory",
74
+ };
75
+ }
76
+ if (wasRenderWithError) {
77
+ console.log("[!] From Scratch due to a previous render error");
78
+ return {
79
+ renderMode: render_1.RENDER_MODE.FROM_SCRATCH,
80
+ reason: "error in previous render",
81
+ };
82
+ }
83
+ if (isNewDeploy) {
84
+ console.log("[!] From Scratch due to a changes in the repo (commit hash)");
85
+ return { renderMode: render_1.RENDER_MODE.FROM_SCRATCH, reason: "new commit hash" };
86
+ }
87
+ if (!shouldBeRendered) {
88
+ console.log(`Skipping render for domain ${domain} as it is not marked for rendering (IDLE).`);
89
+ return { renderMode: render_1.RENDER_MODE.IDLE, reason: "" };
90
+ }
91
+ return { renderMode: render_1.RENDER_MODE.INCREMENTAL, reason: "" };
92
+ }
93
+ async function hasNewCommit(basePath) {
94
+ const commitFile = node_path_1.default.join(basePath, "commit");
95
+ const currentCommit = (0, node_child_process_1.execSync)("git rev-parse HEAD").toString().trim();
96
+ if (await (0, folders_1.pathExists)(commitFile)) {
97
+ const savedCommit = (await promises_1.default.readFile(commitFile, "utf-8")).trim();
98
+ if (savedCommit === currentCommit) {
99
+ return false; // No hay nuevo commit
100
+ }
101
+ return true;
102
+ }
103
+ return true;
104
+ }
105
+ async function updateCommitFile(options) {
106
+ const { basePath } = options;
107
+ const currentCommit = (0, node_child_process_1.execSync)("git rev-parse HEAD").toString().trim();
108
+ await promises_1.default.writeFile(node_path_1.default.join(basePath, "commit"), currentCommit);
109
+ }
110
+ async function getRenderMode(domain) {
111
+ const db = await (0, db_1.readDB)();
112
+ if (!db.domains[domain].renderMode) {
113
+ throw new Error(`Render mode not found for domain ${domain}`);
114
+ }
115
+ return {
116
+ renderMode: db.domains[domain].renderMode,
117
+ reason: db.domains[domain].renderModeReason,
118
+ };
119
+ }
120
+ async function getRenderPathsFromDB(options) {
121
+ const { domain, dbFilePath } = options || {};
122
+ const db = await (0, db_1.readDB)(dbFilePath);
123
+ const paths = db.paths;
124
+ return {
125
+ __root: paths.root,
126
+ __cache: node_path_1.default.join(paths.cxCache, domain || ""),
127
+ __components: paths.components,
128
+ __cx: paths.cx,
129
+ __sites: paths.exportsDir,
130
+ __exports: node_path_1.default.join(paths.exportsDir, domain || ""),
131
+ __ssg: paths.ssg,
132
+ __exports_dist: node_path_1.default.join(paths.exportsDir, domain || "", "dist"),
133
+ __cx_dist: node_path_1.default.join(paths.cx, "dist"),
134
+ };
135
+ }
136
+ async function getRenderMetadataFromDB() {
137
+ const db = await (0, db_1.readDB)();
138
+ return {
139
+ proDomain: db.proDomain,
140
+ griddoVersion: db.griddoVersion,
141
+ buildReportFileName: db.buildReportFileName,
142
+ };
143
+ }
144
+ //# sourceMappingURL=render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../exporter/utils/render.ts"],"names":[],"mappings":"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"}