@griddo/cx 11.7.6-rc.1 → 11.7.6

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 +228 -25
  2. package/build/adapters/gatsby/index.d.ts +4 -0
  3. package/build/adapters/gatsby/utils.d.ts +22 -0
  4. package/build/artifacts/index.d.ts +6 -0
  5. package/build/commands/move-assets.d.ts +1 -0
  6. package/build/commands/prepare-domains-render.d.ts +1 -0
  7. package/build/{exporter/constants → constants}/envs.d.ts +7 -1
  8. package/build/constants/index.d.ts +57 -0
  9. package/build/end-render.js +74 -0
  10. package/build/end-render.js.map +7 -0
  11. package/build/{exporter/constants/errors.d.ts → errors/errors-data.d.ts} +3 -5
  12. package/build/{exporter/utils/errors.d.ts → errors/index.d.ts} +3 -3
  13. package/build/index.d.ts +29 -0
  14. package/build/index.js +73 -0
  15. package/build/index.js.map +7 -0
  16. package/build/prepare-domains-render.js +73 -0
  17. package/build/prepare-domains-render.js.map +7 -0
  18. package/build/react/Favicon/index.d.ts +5 -0
  19. package/build/react/Favicon/utils.d.ts +9 -0
  20. package/build/react/GriddoIntegrations/index.d.ts +20 -0
  21. package/build/react/GriddoIntegrations/utils.d.ts +26 -0
  22. package/{react/index.tsx → build/react/index.d.ts} +0 -1
  23. package/build/react/index.js +3 -0
  24. package/build/registers/api.d.ts +9 -0
  25. package/build/registers/gatsby.d.ts +9 -0
  26. package/build/registers/index.d.ts +3 -0
  27. package/build/reset-render.js +74 -0
  28. package/build/reset-render.js.map +7 -0
  29. package/build/{exporter/services → services}/auth.d.ts +1 -1
  30. package/build/services/domains.d.ts +6 -0
  31. package/build/services/register.d.ts +36 -0
  32. package/build/{exporter/services → services}/robots.d.ts +6 -0
  33. package/build/services/settings.d.ts +4 -0
  34. package/build/{exporter/services → services}/sites.d.ts +2 -5
  35. package/build/services/store.d.ts +6 -0
  36. package/build/start-render.js +100 -0
  37. package/build/start-render.js.map +7 -0
  38. package/build/{exporter/types → types}/api.d.ts +4 -3
  39. package/build/{exporter/types → types}/global.d.ts +6 -6
  40. package/build/{exporter/types → types}/navigation.d.ts +1 -1
  41. package/build/{exporter/types → types}/sites.d.ts +2 -1
  42. package/build/upload-search-content.js +74 -0
  43. package/build/upload-search-content.js.map +7 -0
  44. package/build/utils/alerts.d.ts +3 -0
  45. package/build/{exporter/utils → utils}/cache.d.ts +12 -7
  46. package/build/utils/core-utils.d.ts +107 -0
  47. package/build/utils/create-build-data.d.ts +8 -0
  48. package/build/{exporter/utils → utils}/domains.d.ts +1 -1
  49. package/build/utils/folders.d.ts +53 -0
  50. package/build/{exporter/utils/check-health.d.ts → utils/health-checks.d.ts} +2 -2
  51. package/build/{exporter/utils → utils}/loggin.d.ts +16 -2
  52. package/build/{exporter/utils → utils}/pages.d.ts +2 -2
  53. package/build/utils/render.d.ts +13 -0
  54. package/build/utils/searches.d.ts +15 -0
  55. package/build/{exporter/utils → utils}/sites.d.ts +3 -3
  56. package/build/{exporter/utils → utils}/store.d.ts +38 -10
  57. package/cx.config.d.ts +5 -0
  58. package/cx.config.js +36 -0
  59. package/exporter/adapters/gatsby/index.ts +146 -60
  60. package/exporter/adapters/gatsby/utils.ts +161 -0
  61. package/exporter/artifacts/README.md +34 -0
  62. package/exporter/{utils/artifacts.ts → artifacts/index.ts} +8 -9
  63. package/exporter/build.sh +38 -5
  64. package/exporter/commands/end-render.ts +81 -56
  65. package/exporter/commands/move-assets.ts +11 -0
  66. package/exporter/commands/prepare-domains-render.ts +31 -149
  67. package/exporter/commands/reset-render.ts +3 -12
  68. package/exporter/commands/start-render.ts +47 -18
  69. package/exporter/commands/upload-search-content.ts +21 -206
  70. package/exporter/constants/envs.ts +51 -59
  71. package/exporter/constants/index.ts +129 -0
  72. package/exporter/{constants/errors.ts → errors/errors-data.ts} +15 -24
  73. package/exporter/{utils/errors.ts → errors/index.ts} +9 -10
  74. package/exporter/index.ts +82 -0
  75. package/{react → exporter/react}/Favicon/index.tsx +7 -1
  76. package/{react → exporter/react}/GriddoIntegrations/index.tsx +14 -6
  77. package/{react → exporter/react}/GriddoIntegrations/utils.ts +9 -4
  78. package/exporter/react/index.tsx +11 -0
  79. package/exporter/registers/api.ts +14 -0
  80. package/exporter/registers/gatsby.ts +14 -0
  81. package/exporter/registers/index.ts +4 -0
  82. package/exporter/services/auth.ts +6 -7
  83. package/exporter/services/domains.ts +16 -0
  84. package/exporter/services/navigation.ts +10 -4
  85. package/exporter/services/reference-fields.ts +23 -8
  86. package/exporter/services/register.ts +113 -0
  87. package/exporter/services/robots.ts +15 -8
  88. package/exporter/services/settings.ts +17 -0
  89. package/exporter/services/sites.ts +24 -35
  90. package/exporter/services/store.ts +76 -118
  91. package/exporter/types/api.ts +27 -24
  92. package/exporter/types/global.ts +10 -8
  93. package/exporter/types/navigation.ts +1 -1
  94. package/exporter/types/pages.ts +3 -2
  95. package/exporter/types/sites.ts +2 -1
  96. package/exporter/utils/alerts.ts +29 -0
  97. package/exporter/utils/api.ts +82 -46
  98. package/exporter/utils/cache.ts +59 -34
  99. package/exporter/utils/core-utils.ts +247 -86
  100. package/exporter/utils/create-build-data.ts +17 -0
  101. package/exporter/utils/domains.ts +7 -10
  102. package/exporter/utils/folders.ts +92 -161
  103. package/exporter/utils/health-checks.ts +64 -0
  104. package/exporter/utils/images.ts +6 -1
  105. package/exporter/utils/instance.ts +12 -9
  106. package/exporter/utils/loggin.ts +89 -24
  107. package/exporter/utils/pages.ts +88 -23
  108. package/exporter/utils/render.ts +48 -147
  109. package/exporter/utils/searches.ts +156 -0
  110. package/exporter/utils/sites.ts +77 -67
  111. package/exporter/utils/store.ts +178 -85
  112. package/gatsby-browser.tsx +58 -41
  113. package/gatsby-config.ts +12 -6
  114. package/gatsby-node.ts +77 -15
  115. package/gatsby-ssr.tsx +1 -2
  116. package/package.json +74 -33
  117. package/src/README.md +7 -0
  118. package/src/components/Head.tsx +46 -13
  119. package/src/components/template.tsx +30 -8
  120. package/src/gatsby-node-utils.ts +2 -91
  121. package/src/html.tsx +11 -2
  122. package/src/types.ts +5 -5
  123. package/start-render.js +3 -1
  124. package/tsconfig.json +2 -3
  125. package/build/adapters/gatsby/actions/clean.js +0 -10
  126. package/build/adapters/gatsby/actions/clean.js.map +0 -1
  127. package/build/adapters/gatsby/actions/close.js +0 -12
  128. package/build/adapters/gatsby/actions/close.js.map +0 -1
  129. package/build/adapters/gatsby/actions/data.js +0 -18
  130. package/build/adapters/gatsby/actions/data.js.map +0 -1
  131. package/build/adapters/gatsby/actions/healthCheck.js +0 -10
  132. package/build/adapters/gatsby/actions/healthCheck.js.map +0 -1
  133. package/build/adapters/gatsby/actions/init.js +0 -9
  134. package/build/adapters/gatsby/actions/init.js.map +0 -1
  135. package/build/adapters/gatsby/actions/meta.js +0 -14
  136. package/build/adapters/gatsby/actions/meta.js.map +0 -1
  137. package/build/adapters/gatsby/actions/prepare.js +0 -9
  138. package/build/adapters/gatsby/actions/prepare.js.map +0 -1
  139. package/build/adapters/gatsby/actions/relocation.js +0 -15
  140. package/build/adapters/gatsby/actions/relocation.js.map +0 -1
  141. package/build/adapters/gatsby/actions/restore.js +0 -26
  142. package/build/adapters/gatsby/actions/restore.js.map +0 -1
  143. package/build/adapters/gatsby/actions/ssg.js +0 -9
  144. package/build/adapters/gatsby/actions/ssg.js.map +0 -1
  145. package/build/adapters/gatsby/actions/sync.js +0 -50
  146. package/build/adapters/gatsby/actions/sync.js.map +0 -1
  147. package/build/adapters/gatsby/index.js +0 -74
  148. package/build/adapters/gatsby/index.js.map +0 -1
  149. package/build/adapters/gatsby/shared/context.js +0 -25
  150. package/build/adapters/gatsby/shared/context.js.map +0 -1
  151. package/build/adapters/gatsby/shared/extract-assets.js +0 -58
  152. package/build/adapters/gatsby/shared/extract-assets.js.map +0 -1
  153. package/build/adapters/gatsby/shared/gatsby-build.js +0 -49
  154. package/build/adapters/gatsby/shared/gatsby-build.js.map +0 -1
  155. package/build/adapters/gatsby/shared/sync-render.js +0 -208
  156. package/build/adapters/gatsby/shared/sync-render.js.map +0 -1
  157. package/build/adapters/gatsby/shared/types.js +0 -3
  158. package/build/adapters/gatsby/shared/types.js.map +0 -1
  159. package/build/commands/end-render.js +0 -63
  160. package/build/commands/end-render.js.map +0 -1
  161. package/build/commands/prepare-assets-directory.js +0 -32
  162. package/build/commands/prepare-assets-directory.js.map +0 -1
  163. package/build/commands/prepare-domains-render.js +0 -138
  164. package/build/commands/prepare-domains-render.js.map +0 -1
  165. package/build/commands/reset-render.js +0 -22
  166. package/build/commands/reset-render.js.map +0 -1
  167. package/build/commands/start-render.js +0 -35
  168. package/build/commands/start-render.js.map +0 -1
  169. package/build/commands/upload-search-content.js +0 -189
  170. package/build/commands/upload-search-content.js.map +0 -1
  171. package/build/constants/endpoints.js +0 -42
  172. package/build/constants/endpoints.js.map +0 -1
  173. package/build/constants/envs.js +0 -73
  174. package/build/constants/envs.js.map +0 -1
  175. package/build/constants/errors.js +0 -89
  176. package/build/constants/errors.js.map +0 -1
  177. package/build/exporter/adapters/gatsby/actions/clean.d.ts +0 -3
  178. package/build/exporter/adapters/gatsby/actions/close.d.ts +0 -3
  179. package/build/exporter/adapters/gatsby/actions/data.d.ts +0 -2
  180. package/build/exporter/adapters/gatsby/actions/healthCheck.d.ts +0 -2
  181. package/build/exporter/adapters/gatsby/actions/init.d.ts +0 -2
  182. package/build/exporter/adapters/gatsby/actions/meta.d.ts +0 -2
  183. package/build/exporter/adapters/gatsby/actions/prepare.d.ts +0 -2
  184. package/build/exporter/adapters/gatsby/actions/relocation.d.ts +0 -2
  185. package/build/exporter/adapters/gatsby/actions/restore.d.ts +0 -3
  186. package/build/exporter/adapters/gatsby/actions/ssg.d.ts +0 -3
  187. package/build/exporter/adapters/gatsby/actions/sync.d.ts +0 -3
  188. package/build/exporter/adapters/gatsby/index.d.ts +0 -9
  189. package/build/exporter/adapters/gatsby/shared/context.d.ts +0 -38
  190. package/build/exporter/adapters/gatsby/shared/extract-assets.d.ts +0 -7
  191. package/build/exporter/adapters/gatsby/shared/gatsby-build.d.ts +0 -7
  192. package/build/exporter/adapters/gatsby/shared/sync-render.d.ts +0 -36
  193. package/build/exporter/adapters/gatsby/shared/types.d.ts +0 -34
  194. package/build/exporter/commands/prepare-assets-directory.d.ts +0 -2
  195. package/build/exporter/commands/prepare-domains-render.d.ts +0 -2
  196. package/build/exporter/services/db.d.ts +0 -4
  197. package/build/exporter/services/store.d.ts +0 -15
  198. package/build/exporter/types/render.d.ts +0 -50
  199. package/build/exporter/utils/artifacts.d.ts +0 -6
  200. package/build/exporter/utils/brush.d.ts +0 -18
  201. package/build/exporter/utils/core-utils.d.ts +0 -77
  202. package/build/exporter/utils/folders.d.ts +0 -66
  203. package/build/exporter/utils/render.d.ts +0 -49
  204. package/build/services/auth.js +0 -39
  205. package/build/services/auth.js.map +0 -1
  206. package/build/services/db.js +0 -34
  207. package/build/services/db.js.map +0 -1
  208. package/build/services/navigation.js +0 -93
  209. package/build/services/navigation.js.map +0 -1
  210. package/build/services/reference-fields.js +0 -131
  211. package/build/services/reference-fields.js.map +0 -1
  212. package/build/services/robots.js +0 -58
  213. package/build/services/robots.js.map +0 -1
  214. package/build/services/sites.js +0 -109
  215. package/build/services/sites.js.map +0 -1
  216. package/build/services/store.js +0 -282
  217. package/build/services/store.js.map +0 -1
  218. package/build/types/api.js +0 -3
  219. package/build/types/api.js.map +0 -1
  220. package/build/types/global.js +0 -3
  221. package/build/types/global.js.map +0 -1
  222. package/build/types/navigation.js +0 -3
  223. package/build/types/navigation.js.map +0 -1
  224. package/build/types/pages.js +0 -3
  225. package/build/types/pages.js.map +0 -1
  226. package/build/types/render.js +0 -10
  227. package/build/types/render.js.map +0 -1
  228. package/build/types/sites.js +0 -3
  229. package/build/types/sites.js.map +0 -1
  230. package/build/types/templates.js +0 -3
  231. package/build/types/templates.js.map +0 -1
  232. package/build/utils/api.js +0 -161
  233. package/build/utils/api.js.map +0 -1
  234. package/build/utils/artifacts.js +0 -34
  235. package/build/utils/artifacts.js.map +0 -1
  236. package/build/utils/brush.js +0 -30
  237. package/build/utils/brush.js.map +0 -1
  238. package/build/utils/cache.js +0 -106
  239. package/build/utils/cache.js.map +0 -1
  240. package/build/utils/check-health.js +0 -68
  241. package/build/utils/check-health.js.map +0 -1
  242. package/build/utils/core-utils.js +0 -251
  243. package/build/utils/core-utils.js.map +0 -1
  244. package/build/utils/domains.js +0 -37
  245. package/build/utils/domains.js.map +0 -1
  246. package/build/utils/errors.js +0 -30
  247. package/build/utils/errors.js.map +0 -1
  248. package/build/utils/folders.js +0 -339
  249. package/build/utils/folders.js.map +0 -1
  250. package/build/utils/images.js +0 -45
  251. package/build/utils/images.js.map +0 -1
  252. package/build/utils/instance.js +0 -66
  253. package/build/utils/instance.js.map +0 -1
  254. package/build/utils/loggin.js +0 -102
  255. package/build/utils/loggin.js.map +0 -1
  256. package/build/utils/pages.js +0 -359
  257. package/build/utils/pages.js.map +0 -1
  258. package/build/utils/render.js +0 -144
  259. package/build/utils/render.js.map +0 -1
  260. package/build/utils/sites.js +0 -239
  261. package/build/utils/sites.js.map +0 -1
  262. package/build/utils/store.js +0 -193
  263. package/build/utils/store.js.map +0 -1
  264. package/exporter/adapters/gatsby/actions/clean.ts +0 -14
  265. package/exporter/adapters/gatsby/actions/close.ts +0 -17
  266. package/exporter/adapters/gatsby/actions/data.ts +0 -25
  267. package/exporter/adapters/gatsby/actions/healthCheck.ts +0 -10
  268. package/exporter/adapters/gatsby/actions/init.ts +0 -12
  269. package/exporter/adapters/gatsby/actions/meta.ts +0 -18
  270. package/exporter/adapters/gatsby/actions/prepare.ts +0 -9
  271. package/exporter/adapters/gatsby/actions/relocation.ts +0 -15
  272. package/exporter/adapters/gatsby/actions/restore.ts +0 -36
  273. package/exporter/adapters/gatsby/actions/ssg.ts +0 -12
  274. package/exporter/adapters/gatsby/actions/sync.ts +0 -70
  275. package/exporter/adapters/gatsby/shared/context.ts +0 -50
  276. package/exporter/adapters/gatsby/shared/extract-assets.ts +0 -61
  277. package/exporter/adapters/gatsby/shared/gatsby-build.ts +0 -54
  278. package/exporter/adapters/gatsby/shared/sync-render.ts +0 -294
  279. package/exporter/adapters/gatsby/shared/types.ts +0 -35
  280. package/exporter/build-esbuild.noop +0 -42
  281. package/exporter/commands/prepare-assets-directory.ts +0 -33
  282. package/exporter/services/db.ts +0 -32
  283. package/exporter/types/render.ts +0 -59
  284. package/exporter/utils/brush.ts +0 -34
  285. package/exporter/utils/check-health.ts +0 -79
  286. package/plugins/gatsby-plugin-svgr-loader/gatsby-node.js +0 -55
  287. package/plugins/gatsby-plugin-svgr-loader/package.json +0 -8
  288. package/build/{exporter/commands → commands}/end-render.d.ts +0 -0
  289. package/build/{exporter/commands → commands}/reset-render.d.ts +0 -0
  290. package/build/{exporter/commands → commands}/start-render.d.ts +0 -0
  291. package/build/{exporter/commands → commands}/upload-search-content.d.ts +0 -0
  292. package/build/{exporter/constants → constants}/endpoints.d.ts +0 -0
  293. package/build/{exporter/services → services}/navigation.d.ts +0 -0
  294. package/build/{exporter/services → services}/reference-fields.d.ts +0 -0
  295. package/build/{exporter/types → types}/pages.d.ts +1 -1
  296. /package/build/{exporter/types → types}/templates.d.ts +0 -0
  297. /package/build/{exporter/utils → utils}/api.d.ts +0 -0
  298. /package/build/{exporter/utils → utils}/images.d.ts +0 -0
  299. /package/build/{exporter/utils → utils}/instance.d.ts +0 -0
  300. /package/{react → exporter/react}/Favicon/utils.ts +0 -0
@@ -0,0 +1,156 @@
1
+ import type { PostSearchInfoResponse } from "../types/api";
2
+ import type {
3
+ AIEmbeddingsResponse,
4
+ PostSearchInfoProps,
5
+ } from "../types/global";
6
+
7
+ import fs from "node:fs";
8
+ import path from "node:path";
9
+
10
+ import { post } from "./api";
11
+ import { getConfig } from "./core-utils";
12
+ import { getBuildPagesFromCachedStore } from "./store";
13
+ import { endpoints } from "../constants";
14
+
15
+ /**
16
+ * Save in the BBDD the content of a page parsed without HTML tags.
17
+ *
18
+ * @param props Object with parts of the final page object to be saved in the BBDD.
19
+ */
20
+ async function postSearchInfo(props: PostSearchInfoProps) {
21
+ const {
22
+ title,
23
+ description,
24
+ image,
25
+ pageId,
26
+ languageId,
27
+ siteId,
28
+ url,
29
+ content,
30
+ template,
31
+ } = props;
32
+
33
+ const response = await post<PostSearchInfoResponse>({
34
+ endpoint: endpoints.SEARCH,
35
+ body: {
36
+ title,
37
+ description,
38
+ image,
39
+ pageId,
40
+ languageId,
41
+ siteId,
42
+ url,
43
+ template,
44
+ content,
45
+ },
46
+ useApiCacheDir: false,
47
+ });
48
+
49
+ return response;
50
+ }
51
+
52
+ /**
53
+ * Remove the every cntent inside some HTML tags including them.
54
+ *
55
+ * @param content A string with the content.
56
+ */
57
+ function prepareHTMLContentForSearch(content: string): string {
58
+ // 1. Remove script, style, and other unwanted block tags and their content.
59
+ // The regex looks for <tag...>...</tag> where tag is one of the specified ones.
60
+ const tagsToRemove = [
61
+ "meta",
62
+ "link",
63
+ "style",
64
+ "script",
65
+ "noscript",
66
+ "nav",
67
+ "header",
68
+ "footer",
69
+ ];
70
+ const removeTagsRegex = new RegExp(
71
+ `<(${tagsToRemove.join("|")})\\b[^>]*>.*?<\\/\\1>`,
72
+ "gis",
73
+ );
74
+ let processedContent = content.replace(removeTagsRegex, "");
75
+
76
+ // 2. Strip all remaining HTML tags.
77
+ processedContent = processedContent.replace(/<[^>]+>/g, " ");
78
+
79
+ // 3. Normalize whitespace: replace multiple spaces/newlines with a single space and trim.
80
+ processedContent = processedContent.replace(/\s+/g, " ").trim();
81
+
82
+ return processedContent;
83
+ }
84
+
85
+ /**
86
+ * Function that search in the `/public` dir the content info of the pages and
87
+ * send it to the search table in the ddbb using the API.
88
+ */
89
+ async function uploadRenderedSearchContentToAPI(
90
+ distDomainPath: string,
91
+ domain: string,
92
+ ) {
93
+ const config = getConfig();
94
+ const { __cache } = config.paths(domain);
95
+
96
+ // Extraemos el path de la carpeta store dentro de un dominio
97
+ const storeFolder = path.join(__cache, "store");
98
+
99
+ // Este caso sería que el dominio existe en la instancia pero no hay sites
100
+ // renderizardos bajo el mismo. Por lo que `store` no existe.
101
+ if (!fs.existsSync(storeFolder)) {
102
+ console.log(
103
+ `Skipping uploading content to the search endpoint for the domain ${domain}, it has not exported sites.`,
104
+ );
105
+ return;
106
+ }
107
+
108
+ // Obtenemos las páginas del store cacheado de un dominio
109
+ const storePages = getBuildPagesFromCachedStore(domain);
110
+
111
+ for await (const store of storePages) {
112
+ const {
113
+ context: { page, openGraph, pageMetadata },
114
+ } = store;
115
+
116
+ const { compose } = page.fullPath;
117
+
118
+ const contextPath = path.resolve(`${distDomainPath}/${compose}/index.html`);
119
+
120
+ const content = fs.readFileSync(contextPath).toString();
121
+
122
+ const pageObject: PostSearchInfoProps = {
123
+ siteId: page.site,
124
+ pageId: page.id,
125
+ // `pageMetadata.title` has already a fallback `metatitle ||
126
+ // pageTitle` so probably `title` never will be take the
127
+ // `openGraph?.title` value. Only when the `metatitle` and
128
+ // `pageTitle` are empty.
129
+ title: pageMetadata?.title || openGraph?.title,
130
+ languageId: page.language,
131
+ url: page.fullUrl,
132
+ template: page.template.templateType || page.templateId,
133
+ description: pageMetadata?.description || openGraph?.description,
134
+ image: openGraph.image,
135
+ content: prepareHTMLContentForSearch(content),
136
+ };
137
+
138
+ await postSearchInfo(pageObject);
139
+ }
140
+ }
141
+
142
+ async function startAIEmbeddings() {
143
+ try {
144
+ await post<AIEmbeddingsResponse>({
145
+ endpoint: endpoints.AI_EMBEDDINGS,
146
+ useApiCacheDir: false,
147
+ });
148
+ } catch (error) {
149
+ console.warn(
150
+ "There was an error with the ai embeddings",
151
+ (error as Error).message,
152
+ );
153
+ }
154
+ }
155
+
156
+ export { postSearchInfo, startAIEmbeddings, uploadRenderedSearchContentToAPI };
@@ -1,16 +1,14 @@
1
1
  import type { Site, SiteData } from "../types/sites";
2
2
 
3
- import fsp from "node:fs/promises";
4
3
  import path from "node:path";
5
4
 
5
+ import fs from "fs-extra";
6
6
  import { parse } from "js2xmlparser";
7
7
 
8
- import {
9
- GRIDDO_API_URL,
10
- GRIDDO_RENDER_ALL_SITES,
11
- GRIDDO_RENDER_PAGES,
12
- GRIDDO_RENDER_SITE,
13
- } from "../constants/envs";
8
+ import { envs } from "../constants";
9
+ import { getConfig } from "./core-utils";
10
+ import { buildLog, verboseLog } from "./loggin";
11
+ import { getBuildMetadata } from "./store";
14
12
  import { AuthService } from "../services/auth";
15
13
  import {
16
14
  endSiteRender,
@@ -21,28 +19,31 @@ import {
21
19
  getSiteSocials,
22
20
  startSiteRender,
23
21
  } from "../services/sites";
24
- import { pathExists } from "./folders";
25
- import { verboseLog } from "./loggin";
26
- import { getRenderMetadataFromDB, getRenderPathsFromDB } from "./render";
27
- import { getBuildMetadata } from "./store";
22
+
23
+ const config = getConfig();
28
24
 
29
25
  /**
30
26
  * Check the instance sites and returns site prepared to be published and unpublished.
31
27
  */
32
28
  async function getSitesToRender(domain: string) {
33
- console.info(`API URL ${GRIDDO_API_URL as string}`);
29
+ console.info(`API URL ${envs.GRIDDO_API_URL as string}`);
34
30
 
35
31
  // Login to API
36
- // await AuthService.login();
32
+ await AuthService.login();
37
33
 
38
34
  // Get all sites. An array of Site
39
35
  const allSites = await getAllSites(domain);
40
36
 
41
37
  // Filter the array of sites to get only the ones to build/render
42
- const validSites = GRIDDO_RENDER_ALL_SITES
43
- ? allSites.filter((site) => !GRIDDO_RENDER_SITE || site.id === GRIDDO_RENDER_SITE)
38
+ const validSites = envs.GRIDDO_RENDER_ALL_SITES
39
+ ? allSites.filter(
40
+ (site) =>
41
+ !envs.GRIDDO_RENDER_SITE || site.id === envs.GRIDDO_RENDER_SITE,
42
+ )
44
43
  : allSites.filter((site) =>
45
- GRIDDO_RENDER_SITE ? site.id === GRIDDO_RENDER_SITE : !!site.shouldBeUpdated,
44
+ envs.GRIDDO_RENDER_SITE
45
+ ? site.id === envs.GRIDDO_RENDER_SITE
46
+ : !!site.shouldBeUpdated,
46
47
  );
47
48
 
48
49
  // If there are valid sites...
@@ -57,7 +58,8 @@ async function getSitesToRender(domain: string) {
57
58
  site.domains = items
58
59
  .filter(
59
60
  (item) =>
60
- item.domain && (item.domain.slug === domain || item.domain.slug === `/${domain}`),
61
+ item.domain &&
62
+ (item.domain.slug === domain || item.domain.slug === `/${domain}`),
61
63
  )
62
64
  .map((item) => ({ [item.id]: `${item.domain.slug}${item.path}` }));
63
65
  }
@@ -65,11 +67,15 @@ async function getSitesToRender(domain: string) {
65
67
 
66
68
  // Save sites object to publish
67
69
  const sitesToPublish = validSites.filter((site) =>
68
- GRIDDO_RENDER_SITE ? site.id === GRIDDO_RENDER_SITE : !!site.isPublished,
70
+ envs.GRIDDO_RENDER_SITE
71
+ ? site.id === envs.GRIDDO_RENDER_SITE
72
+ : !!site.isPublished,
69
73
  );
70
74
 
71
75
  // Save sites object to unpublish
72
- const sitesToUnpublish = validSites.filter((site) => !site.isPublished && site.shouldBeUpdated);
76
+ const sitesToUnpublish = validSites.filter(
77
+ (site) => !site.isPublished && site.shouldBeUpdated,
78
+ );
73
79
 
74
80
  return {
75
81
  sitesToPublish,
@@ -84,7 +90,7 @@ async function getSitesToRender(domain: string) {
84
90
  * @see https://griddoio.notion.site/Sites-d7bb0b7cb8d24894a5337e1139fc3d09#2019d3255bda4d219c7e19cf28d0c4fe
85
91
  */
86
92
  async function unpublishSites(sites: Array<Site>) {
87
- const { __cx } = await getRenderPathsFromDB();
93
+ const { __cx } = config.paths();
88
94
 
89
95
  for (const site of sites) {
90
96
  // API
@@ -101,8 +107,7 @@ async function unpublishSites(sites: Array<Site>) {
101
107
 
102
108
  // STORE
103
109
  // Remove site directory from the Store
104
- // @todo: quitar. Como ya no hay persistenci de store, esto debería eliminarse de forma segura.
105
- await fsp.rm(path.join(__cx, "store", site.id.toString()), {
110
+ fs.rmSync(path.join(__cx, "store", site.id.toString()), {
106
111
  force: true,
107
112
  recursive: true,
108
113
  });
@@ -125,8 +130,8 @@ async function getSiteData(siteID: number) {
125
130
 
126
131
  const { siteHash, unpublishHashes, publishIds } = buildData;
127
132
  const { headers, footers } = siteInfo;
128
- const validPagesIds = GRIDDO_RENDER_PAGES.length
129
- ? GRIDDO_RENDER_PAGES.filter((item) => publishIds.includes(item))
133
+ const validPagesIds = envs.GRIDDO_RENDER_PAGES.length
134
+ ? envs.GRIDDO_RENDER_PAGES.filter((item) => publishIds.includes(item))
130
135
  : publishIds;
131
136
 
132
137
  const siteData: SiteData = {
@@ -147,12 +152,14 @@ async function getSiteData(siteID: number) {
147
152
  /**
148
153
  * Save a file with the end of build process to use as `build-end` signal.
149
154
  */
150
- async function generateBuildReport(domain: string) {
151
- const authControl = await AuthService.login();
155
+ async function generateBuildReport() {
156
+ const { __cx } = config.paths();
157
+ const { buildReportFileName } = config;
158
+
159
+ const { buildProcessData } = await getBuildMetadata();
152
160
 
153
- const { __cx } = await getRenderPathsFromDB();
154
- const { buildReportFileName } = await getRenderMetadataFromDB();
155
- const { buildProcessData } = await getBuildMetadata(domain);
161
+ // Get the token
162
+ const authControl = await AuthService.login();
156
163
 
157
164
  const buildSitesInfo = Object.keys(buildProcessData).map((siteID) => ({
158
165
  ...buildProcessData[siteID],
@@ -165,54 +172,51 @@ async function generateBuildReport(domain: string) {
165
172
  };
166
173
 
167
174
  const reportFilePath = path.join(__cx, "dist", buildReportFileName);
168
-
169
- await fsp.writeFile(reportFilePath, JSON.stringify(report));
175
+ fs.writeFileSync(reportFilePath, JSON.stringify(report));
170
176
 
171
177
  verboseLog(`build report saved in ${reportFilePath}`);
178
+
179
+ buildLog(`Build report saved for ${buildSitesInfo.length} site(s)`);
172
180
  }
173
181
 
174
182
  /**
175
183
  * Generate sitemaps and save them into file system.
176
184
  */
177
- async function generateSitemaps(domain: string) {
178
- const { __cx } = await getRenderPathsFromDB();
179
- const { sitesToPublish } = await getBuildMetadata(domain);
185
+ async function generateSitemaps() {
186
+ const { sitesToPublish } = await getBuildMetadata();
187
+ const { __cx } = config.paths();
180
188
  const distDir = path.join(__cx, "dist");
189
+
181
190
  const templateSitemapPrefix = "sitemap-";
182
191
 
183
192
  const isGriddoSitemapFile = (file: string) =>
184
- file === "sitemap.xml" || (file.startsWith(templateSitemapPrefix) && file.endsWith(".xml"));
193
+ file === "sitemap.xml" ||
194
+ (file.startsWith(templateSitemapPrefix) && file.endsWith(".xml"));
185
195
 
186
196
  for (const site of sitesToPublish) {
187
197
  const { id, languages } = site;
188
198
 
189
199
  for (const lang of languages) {
190
- // Local copy of headers to avoid mutating the shared object
191
- const localHeaders: Record<string, string> = AuthService.headers
192
- ? { ...AuthService.headers }
193
- : {};
194
- localHeaders.lang = lang.id.toString();
200
+ if (AuthService.headers) {
201
+ AuthService.headers.lang = lang.id.toString();
202
+ }
195
203
 
196
- const response = await getSitemap({ siteId: id, headers: localHeaders });
204
+ const response = await getSitemap(id);
197
205
 
198
- if (!response) {
199
- continue;
200
- }
206
+ if (!response) continue;
201
207
 
202
- const { items: sitemapPagesGroup, url } = response;
203
- const { home, domain } = url;
208
+ const {
209
+ items: sitemapPagesGroup,
210
+ url: { home, domain },
211
+ } = response;
204
212
 
205
- if (!home) {
206
- continue;
207
- }
213
+ if (!home) continue;
208
214
 
209
215
  const domainLanguage = site.domains.find(
210
216
  (domain) => Object.keys(domain)[0] === lang.id.toString(),
211
217
  );
212
218
 
213
- if (!domainLanguage) {
214
- continue;
215
- }
219
+ if (!domainLanguage) continue;
216
220
 
217
221
  const slug = Object.values(domainLanguage)[0];
218
222
  const sitemaps: Array<string> = [];
@@ -220,16 +224,16 @@ async function generateSitemaps(domain: string) {
220
224
  const sitemapBasePath = path.join(distDir, slug.replace(domain, ""));
221
225
 
222
226
  /** delete every griddo sitemap file before create the new ones */
223
- if (await pathExists(sitemapBasePath)) {
227
+ if (fs.existsSync(sitemapBasePath)) {
224
228
  try {
225
- const files = await fsp.readdir(sitemapBasePath);
229
+ const files = fs.readdirSync(sitemapBasePath);
226
230
  for (const file of files) {
227
231
  if (isGriddoSitemapFile(file)) {
228
232
  const filePath = path.join(sitemapBasePath, file);
229
233
  try {
230
- await fsp.rm(filePath);
234
+ fs.unlinkSync(filePath);
231
235
  } catch (err) {
232
- console.error(`Error deleting file ${filePath}:`, err);
236
+ console.error(`Error removing ${filePath}:`, err);
233
237
  }
234
238
  }
235
239
  }
@@ -241,9 +245,7 @@ async function generateSitemaps(domain: string) {
241
245
  for (const templateId of sitemapPageGroupKeys) {
242
246
  const sitemapPages = sitemapPagesGroup[templateId];
243
247
 
244
- if (!sitemapPages.length) {
245
- continue;
246
- }
248
+ if (!sitemapPages.length) continue;
247
249
 
248
250
  const siteMap = parse("urlset", {
249
251
  "@": {
@@ -258,9 +260,11 @@ async function generateSitemaps(domain: string) {
258
260
  const sitemapName = `/${templateSitemapPrefix}${templateId.toLowerCase()}.xml`;
259
261
  const exactPath = path.join(sitemapBasePath, sitemapName);
260
262
 
261
- await saveFile(exactPath, siteMap);
263
+ saveFile(exactPath, siteMap);
262
264
 
263
- sitemaps.push(`${home.endsWith("/") ? home.slice(0, -1) : home}${sitemapName}`);
265
+ sitemaps.push(
266
+ `${home.endsWith("/") ? home.slice(0, -1) : home}${sitemapName}`,
267
+ );
264
268
  }
265
269
 
266
270
  if (!sitemaps.length) {
@@ -274,7 +278,7 @@ async function generateSitemaps(domain: string) {
274
278
 
275
279
  const exactPath = path.join(sitemapBasePath, "sitemap.xml");
276
280
 
277
- await saveFile(exactPath, siteMap);
281
+ saveFile(exactPath, siteMap);
278
282
  verboseLog(`sitemap generated in ${exactPath}`);
279
283
  }
280
284
  }
@@ -286,17 +290,23 @@ async function generateSitemaps(domain: string) {
286
290
  * @param filePath The path of the file to save the content to.
287
291
  * @param content The content to save to the file.
288
292
  */
289
- async function saveFile(filePath: string, content: string) {
293
+ function saveFile(filePath: string, content: string) {
290
294
  try {
291
295
  const pathName = path.dirname(filePath);
292
- if (!(await pathExists(pathName))) {
293
- await fsp.mkdir(pathName, { recursive: true });
296
+ if (!fs.existsSync(pathName)) {
297
+ fs.mkdirSync(pathName, { recursive: true });
294
298
  }
295
- await fsp.writeFile(filePath, content);
299
+ fs.writeFileSync(filePath, content);
296
300
  } catch (error) {
297
301
  console.log(error);
298
302
  throw new Error(`Error saving a file`);
299
303
  }
300
304
  }
301
305
 
302
- export { generateBuildReport, generateSitemaps, getSiteData, getSitesToRender, unpublishSites };
306
+ export {
307
+ generateBuildReport,
308
+ generateSitemaps,
309
+ getSiteData,
310
+ getSitesToRender,
311
+ unpublishSites,
312
+ };