@griddo/cx 11.7.7-rc.0 → 11.7.7-rc.1

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 (280) hide show
  1. package/README.md +226 -27
  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/end-render.d.ts +2 -0
  6. package/build/commands/move-assets.d.ts +1 -0
  7. package/build/commands/prepare-domains-render.d.ts +1 -0
  8. package/build/commands/reset-render.d.ts +2 -0
  9. package/build/commands/start-render.d.ts +2 -0
  10. package/build/commands/upload-search-content.d.ts +2 -0
  11. package/build/constants/endpoints.d.ts +19 -0
  12. package/build/constants/envs.d.ts +37 -0
  13. package/build/constants/index.d.ts +57 -0
  14. package/build/end-render.js +74 -0
  15. package/build/end-render.js.map +7 -0
  16. package/build/errors/errors-data.d.ts +22 -0
  17. package/build/errors/index.d.ts +15 -0
  18. package/build/index.d.ts +29 -0
  19. package/build/index.js +73 -0
  20. package/build/index.js.map +7 -0
  21. package/build/prepare-domains-render.js +73 -0
  22. package/build/prepare-domains-render.js.map +7 -0
  23. package/build/react/Favicon/index.d.ts +5 -0
  24. package/build/react/Favicon/utils.d.ts +9 -0
  25. package/build/react/GriddoIntegrations/index.d.ts +20 -0
  26. package/build/react/GriddoIntegrations/utils.d.ts +26 -0
  27. package/{react/index.tsx → build/react/index.d.ts} +0 -1
  28. package/build/react/index.js +3 -0
  29. package/build/registers/api.d.ts +9 -0
  30. package/build/registers/gatsby.d.ts +9 -0
  31. package/build/registers/index.d.ts +3 -0
  32. package/build/reset-render.js +74 -0
  33. package/build/reset-render.js.map +7 -0
  34. package/build/services/auth.d.ts +10 -0
  35. package/build/services/domains.d.ts +6 -0
  36. package/build/services/navigation.d.ts +50 -0
  37. package/build/services/reference-fields.d.ts +20 -0
  38. package/build/services/register.d.ts +36 -0
  39. package/build/services/robots.d.ts +19 -0
  40. package/build/services/settings.d.ts +4 -0
  41. package/build/services/sites.d.ts +29 -0
  42. package/build/services/store.d.ts +6 -0
  43. package/build/start-render.js +100 -0
  44. package/build/start-render.js.map +7 -0
  45. package/build/types/api.d.ts +142 -0
  46. package/build/types/global.d.ts +84 -0
  47. package/build/types/navigation.d.ts +28 -0
  48. package/build/types/pages.d.ts +144 -0
  49. package/build/types/sites.d.ts +57 -0
  50. package/build/types/templates.d.ts +8 -0
  51. package/build/upload-search-content.js +74 -0
  52. package/build/upload-search-content.js.map +7 -0
  53. package/build/utils/alerts.d.ts +3 -0
  54. package/build/utils/api.d.ts +23 -0
  55. package/build/utils/cache.d.ts +35 -0
  56. package/build/utils/core-utils.d.ts +107 -0
  57. package/build/utils/create-build-data.d.ts +8 -0
  58. package/build/utils/domains.d.ts +13 -0
  59. package/build/utils/folders.d.ts +53 -0
  60. package/build/utils/health-checks.d.ts +7 -0
  61. package/build/utils/images.d.ts +16 -0
  62. package/build/utils/instance.d.ts +21 -0
  63. package/build/utils/loggin.d.ts +51 -0
  64. package/build/utils/pages.d.ts +34 -0
  65. package/build/utils/render.d.ts +13 -0
  66. package/build/utils/searches.d.ts +15 -0
  67. package/build/utils/sites.d.ts +31 -0
  68. package/build/utils/store.d.ts +81 -0
  69. package/cx.config.d.ts +5 -0
  70. package/cx.config.js +36 -0
  71. package/exporter/adapters/gatsby/index.ts +147 -67
  72. package/exporter/adapters/gatsby/utils.ts +161 -0
  73. package/exporter/artifacts/README.md +34 -0
  74. package/exporter/artifacts/index.ts +33 -0
  75. package/exporter/build.sh +38 -4
  76. package/exporter/commands/end-render.ts +69 -73
  77. package/exporter/commands/move-assets.ts +11 -0
  78. package/exporter/commands/prepare-domains-render.ts +31 -144
  79. package/exporter/commands/reset-render.ts +1 -10
  80. package/exporter/commands/start-render.ts +44 -23
  81. package/exporter/commands/upload-search-content.ts +20 -194
  82. package/exporter/constants/envs.ts +55 -57
  83. package/exporter/constants/index.ts +129 -0
  84. package/exporter/{constants/errors.ts → errors/errors-data.ts} +14 -24
  85. package/exporter/{utils/errors.ts → errors/index.ts} +9 -10
  86. package/exporter/index.ts +82 -0
  87. package/{react → exporter/react}/Favicon/index.tsx +7 -1
  88. package/{react → exporter/react}/GriddoIntegrations/index.tsx +14 -6
  89. package/{react → exporter/react}/GriddoIntegrations/utils.ts +9 -4
  90. package/exporter/react/index.tsx +11 -0
  91. package/exporter/registers/api.ts +14 -0
  92. package/exporter/registers/gatsby.ts +14 -0
  93. package/exporter/registers/index.ts +4 -0
  94. package/exporter/services/auth.ts +6 -7
  95. package/exporter/services/domains.ts +16 -0
  96. package/exporter/services/navigation.ts +10 -4
  97. package/exporter/services/reference-fields.ts +23 -8
  98. package/exporter/services/register.ts +113 -0
  99. package/exporter/services/robots.ts +16 -9
  100. package/exporter/services/settings.ts +17 -0
  101. package/exporter/services/sites.ts +24 -35
  102. package/exporter/services/store.ts +78 -120
  103. package/exporter/types/api.ts +27 -24
  104. package/exporter/types/global.ts +10 -7
  105. package/exporter/types/navigation.ts +1 -1
  106. package/exporter/types/pages.ts +3 -2
  107. package/exporter/types/sites.ts +2 -1
  108. package/exporter/utils/alerts.ts +29 -0
  109. package/exporter/utils/api.ts +82 -46
  110. package/exporter/utils/cache.ts +62 -37
  111. package/exporter/utils/core-utils.ts +248 -129
  112. package/exporter/utils/create-build-data.ts +17 -0
  113. package/exporter/utils/domains.ts +7 -10
  114. package/exporter/utils/folders.ts +95 -187
  115. package/exporter/utils/health-checks.ts +64 -0
  116. package/exporter/utils/images.ts +6 -1
  117. package/exporter/utils/instance.ts +12 -9
  118. package/exporter/utils/loggin.ts +91 -32
  119. package/exporter/utils/pages.ts +88 -23
  120. package/exporter/utils/render.ts +48 -149
  121. package/exporter/utils/searches.ts +156 -0
  122. package/exporter/utils/sites.ts +90 -81
  123. package/exporter/utils/store.ts +180 -87
  124. package/gatsby-browser.tsx +58 -41
  125. package/gatsby-config.ts +12 -6
  126. package/gatsby-node.ts +77 -15
  127. package/gatsby-ssr.tsx +1 -2
  128. package/package.json +78 -36
  129. package/src/README.md +7 -0
  130. package/src/components/Head.tsx +46 -13
  131. package/src/components/template.tsx +30 -8
  132. package/src/gatsby-node-utils.ts +2 -91
  133. package/src/html.tsx +11 -2
  134. package/src/types.ts +5 -5
  135. package/start-render.js +7 -0
  136. package/tsconfig.json +3 -5
  137. package/build/adapters/gatsby/actions/clean.js +0 -10
  138. package/build/adapters/gatsby/actions/clean.js.map +0 -1
  139. package/build/adapters/gatsby/actions/close.js +0 -12
  140. package/build/adapters/gatsby/actions/close.js.map +0 -1
  141. package/build/adapters/gatsby/actions/data.js +0 -18
  142. package/build/adapters/gatsby/actions/data.js.map +0 -1
  143. package/build/adapters/gatsby/actions/healthCheck.js +0 -10
  144. package/build/adapters/gatsby/actions/healthCheck.js.map +0 -1
  145. package/build/adapters/gatsby/actions/init.js +0 -9
  146. package/build/adapters/gatsby/actions/init.js.map +0 -1
  147. package/build/adapters/gatsby/actions/meta.js +0 -14
  148. package/build/adapters/gatsby/actions/meta.js.map +0 -1
  149. package/build/adapters/gatsby/actions/prepare.js +0 -9
  150. package/build/adapters/gatsby/actions/prepare.js.map +0 -1
  151. package/build/adapters/gatsby/actions/relocation.js +0 -15
  152. package/build/adapters/gatsby/actions/relocation.js.map +0 -1
  153. package/build/adapters/gatsby/actions/restore.js +0 -26
  154. package/build/adapters/gatsby/actions/restore.js.map +0 -1
  155. package/build/adapters/gatsby/actions/ssg.js +0 -9
  156. package/build/adapters/gatsby/actions/ssg.js.map +0 -1
  157. package/build/adapters/gatsby/actions/sync.js +0 -51
  158. package/build/adapters/gatsby/actions/sync.js.map +0 -1
  159. package/build/adapters/gatsby/index.js +0 -79
  160. package/build/adapters/gatsby/index.js.map +0 -1
  161. package/build/adapters/gatsby/shared/context.js +0 -31
  162. package/build/adapters/gatsby/shared/context.js.map +0 -1
  163. package/build/adapters/gatsby/shared/diff-assets.js +0 -101
  164. package/build/adapters/gatsby/shared/diff-assets.js.map +0 -1
  165. package/build/adapters/gatsby/shared/extract-assets.js +0 -58
  166. package/build/adapters/gatsby/shared/extract-assets.js.map +0 -1
  167. package/build/adapters/gatsby/shared/gatsby-build.js +0 -49
  168. package/build/adapters/gatsby/shared/gatsby-build.js.map +0 -1
  169. package/build/adapters/gatsby/shared/sync-render.js +0 -210
  170. package/build/adapters/gatsby/shared/sync-render.js.map +0 -1
  171. package/build/adapters/gatsby/shared/types.js +0 -3
  172. package/build/adapters/gatsby/shared/types.js.map +0 -1
  173. package/build/commands/end-render.js +0 -88
  174. package/build/commands/end-render.js.map +0 -1
  175. package/build/commands/prepare-assets-directory.js +0 -32
  176. package/build/commands/prepare-assets-directory.js.map +0 -1
  177. package/build/commands/prepare-domains-render.js +0 -133
  178. package/build/commands/prepare-domains-render.js.map +0 -1
  179. package/build/commands/reset-render.js +0 -22
  180. package/build/commands/reset-render.js.map +0 -1
  181. package/build/commands/start-render.js +0 -45
  182. package/build/commands/start-render.js.map +0 -1
  183. package/build/commands/upload-search-content.js +0 -180
  184. package/build/commands/upload-search-content.js.map +0 -1
  185. package/build/constants/endpoints.js +0 -42
  186. package/build/constants/endpoints.js.map +0 -1
  187. package/build/constants/envs.js +0 -68
  188. package/build/constants/envs.js.map +0 -1
  189. package/build/constants/errors.js +0 -81
  190. package/build/constants/errors.js.map +0 -1
  191. package/build/services/auth.js +0 -40
  192. package/build/services/auth.js.map +0 -1
  193. package/build/services/db-class.js +0 -49
  194. package/build/services/db-class.js.map +0 -1
  195. package/build/services/db.js +0 -34
  196. package/build/services/db.js.map +0 -1
  197. package/build/services/navigation.js +0 -96
  198. package/build/services/navigation.js.map +0 -1
  199. package/build/services/reference-fields.js +0 -131
  200. package/build/services/reference-fields.js.map +0 -1
  201. package/build/services/robots.js +0 -60
  202. package/build/services/robots.js.map +0 -1
  203. package/build/services/sites.js +0 -109
  204. package/build/services/sites.js.map +0 -1
  205. package/build/services/store.js +0 -282
  206. package/build/services/store.js.map +0 -1
  207. package/build/types/api.js +0 -3
  208. package/build/types/api.js.map +0 -1
  209. package/build/types/global.js +0 -3
  210. package/build/types/global.js.map +0 -1
  211. package/build/types/navigation.js +0 -3
  212. package/build/types/navigation.js.map +0 -1
  213. package/build/types/pages.js +0 -3
  214. package/build/types/pages.js.map +0 -1
  215. package/build/types/render.js +0 -10
  216. package/build/types/render.js.map +0 -1
  217. package/build/types/sites.js +0 -3
  218. package/build/types/sites.js.map +0 -1
  219. package/build/types/templates.js +0 -3
  220. package/build/types/templates.js.map +0 -1
  221. package/build/utils/api.js +0 -161
  222. package/build/utils/api.js.map +0 -1
  223. package/build/utils/artifacts.js +0 -34
  224. package/build/utils/artifacts.js.map +0 -1
  225. package/build/utils/brush.js +0 -30
  226. package/build/utils/brush.js.map +0 -1
  227. package/build/utils/cache.js +0 -106
  228. package/build/utils/cache.js.map +0 -1
  229. package/build/utils/check-health.js +0 -68
  230. package/build/utils/check-health.js.map +0 -1
  231. package/build/utils/core-utils.js +0 -283
  232. package/build/utils/core-utils.js.map +0 -1
  233. package/build/utils/domains.js +0 -37
  234. package/build/utils/domains.js.map +0 -1
  235. package/build/utils/errors.js +0 -30
  236. package/build/utils/errors.js.map +0 -1
  237. package/build/utils/folders.js +0 -362
  238. package/build/utils/folders.js.map +0 -1
  239. package/build/utils/images.js +0 -45
  240. package/build/utils/images.js.map +0 -1
  241. package/build/utils/instance.js +0 -66
  242. package/build/utils/instance.js.map +0 -1
  243. package/build/utils/loggin.js +0 -108
  244. package/build/utils/loggin.js.map +0 -1
  245. package/build/utils/pages.js +0 -359
  246. package/build/utils/pages.js.map +0 -1
  247. package/build/utils/render.js +0 -144
  248. package/build/utils/render.js.map +0 -1
  249. package/build/utils/sites.js +0 -240
  250. package/build/utils/sites.js.map +0 -1
  251. package/build/utils/store.js +0 -193
  252. package/build/utils/store.js.map +0 -1
  253. package/exporter/adapters/gatsby/actions/clean.ts +0 -14
  254. package/exporter/adapters/gatsby/actions/close.ts +0 -17
  255. package/exporter/adapters/gatsby/actions/data.ts +0 -25
  256. package/exporter/adapters/gatsby/actions/healthCheck.ts +0 -10
  257. package/exporter/adapters/gatsby/actions/init.ts +0 -12
  258. package/exporter/adapters/gatsby/actions/meta.ts +0 -18
  259. package/exporter/adapters/gatsby/actions/prepare.ts +0 -9
  260. package/exporter/adapters/gatsby/actions/relocation.ts +0 -15
  261. package/exporter/adapters/gatsby/actions/restore.ts +0 -36
  262. package/exporter/adapters/gatsby/actions/ssg.ts +0 -12
  263. package/exporter/adapters/gatsby/actions/sync.ts +0 -71
  264. package/exporter/adapters/gatsby/shared/context.ts +0 -50
  265. package/exporter/adapters/gatsby/shared/diff-assets.ts +0 -113
  266. package/exporter/adapters/gatsby/shared/extract-assets.ts +0 -61
  267. package/exporter/adapters/gatsby/shared/gatsby-build.ts +0 -54
  268. package/exporter/adapters/gatsby/shared/sync-render.ts +0 -276
  269. package/exporter/adapters/gatsby/shared/types.ts +0 -35
  270. package/exporter/build-esbuild.noop +0 -42
  271. package/exporter/commands/prepare-assets-directory.ts +0 -33
  272. package/exporter/services/db-class.ts +0 -54
  273. package/exporter/services/db.ts +0 -32
  274. package/exporter/types/render.ts +0 -59
  275. package/exporter/utils/artifacts.ts +0 -34
  276. package/exporter/utils/brush.ts +0 -34
  277. package/exporter/utils/check-health.ts +0 -79
  278. package/plugins/gatsby-plugin-svgr-loader/gatsby-node.js +0 -55
  279. package/plugins/gatsby-plugin-svgr-loader/package.json +0 -8
  280. /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
 
6
- import { create } from "xmlbuilder2";
5
+ import fs from "fs-extra";
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 { __root } = 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(__root, "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 { __root } = 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],
@@ -164,55 +171,52 @@ async function generateBuildReport(domain: string) {
164
171
  sites: buildSitesInfo,
165
172
  };
166
173
 
167
- const reportFilePath = path.join(__root, "dist", buildReportFileName);
168
-
169
- await fsp.writeFile(reportFilePath, JSON.stringify(report));
174
+ const reportFilePath = path.join(__cx, "dist", buildReportFileName);
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 { __root } = await getRenderPathsFromDB();
179
- const { sitesToPublish } = await getBuildMetadata(domain);
180
- const distDir = path.join(__root, "dist");
185
+ async function generateSitemaps() {
186
+ const { sitesToPublish } = await getBuildMetadata();
187
+ const { __cx } = config.paths();
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,41 +245,40 @@ 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
- const siteMap = create({ version: "1.0", encoding: "UTF-8" })
249
- .ele("urlset", {
250
+ const siteMap = parse("urlset", {
251
+ "@": {
250
252
  xmlns: "http://www.sitemaps.org/schemas/sitemap/0.9",
251
253
  "xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance",
252
254
  "xsi:schemaLocation":
253
- "http://www.sitemaps.org/schemas/sitemap/0.9 " +
254
- "http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd",
255
- })
256
- .ele(sitemapPages.map((page) => ({ url: page })))
257
- .end({ prettyPrint: true });
255
+ "http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd",
256
+ },
257
+ url: sitemapPages,
258
+ });
258
259
 
259
260
  const sitemapName = `/${templateSitemapPrefix}${templateId.toLowerCase()}.xml`;
260
261
  const exactPath = path.join(sitemapBasePath, sitemapName);
261
262
 
262
- await saveFile(exactPath, siteMap);
263
+ saveFile(exactPath, siteMap);
263
264
 
264
- sitemaps.push(`${home.endsWith("/") ? home.slice(0, -1) : home}${sitemapName}`);
265
+ sitemaps.push(
266
+ `${home.endsWith("/") ? home.slice(0, -1) : home}${sitemapName}`,
267
+ );
265
268
  }
266
269
 
267
270
  if (!sitemaps.length) {
268
271
  continue;
269
272
  }
270
273
 
271
- const siteMap = create({ version: "1.0", encoding: "UTF-8" })
272
- .ele("sitemapindex", { xmlns: "http://www.sitemaps.org/schemas/sitemap/0.9" })
273
- .ele(sitemaps.map((loc) => ({ sitemap: { loc } })))
274
- .end({ prettyPrint: true });
274
+ const siteMap = parse("sitemapindex", {
275
+ "@": { xmlns: "http://www.sitemaps.org/schemas/sitemap/0.9" },
276
+ sitemap: sitemaps.map((loc) => ({ loc })),
277
+ });
275
278
 
276
279
  const exactPath = path.join(sitemapBasePath, "sitemap.xml");
277
280
 
278
- await saveFile(exactPath, siteMap);
281
+ saveFile(exactPath, siteMap);
279
282
  verboseLog(`sitemap generated in ${exactPath}`);
280
283
  }
281
284
  }
@@ -287,17 +290,23 @@ async function generateSitemaps(domain: string) {
287
290
  * @param filePath The path of the file to save the content to.
288
291
  * @param content The content to save to the file.
289
292
  */
290
- async function saveFile(filePath: string, content: string) {
293
+ function saveFile(filePath: string, content: string) {
291
294
  try {
292
295
  const pathName = path.dirname(filePath);
293
- if (!(await pathExists(pathName))) {
294
- await fsp.mkdir(pathName, { recursive: true });
296
+ if (!fs.existsSync(pathName)) {
297
+ fs.mkdirSync(pathName, { recursive: true });
295
298
  }
296
- await fsp.writeFile(filePath, content);
299
+ fs.writeFileSync(filePath, content);
297
300
  } catch (error) {
298
301
  console.log(error);
299
302
  throw new Error(`Error saving a file`);
300
303
  }
301
304
  }
302
305
 
303
- export { generateBuildReport, generateSitemaps, getSiteData, getSitesToRender, unpublishSites };
306
+ export {
307
+ generateBuildReport,
308
+ generateSitemaps,
309
+ getSiteData,
310
+ getSitesToRender,
311
+ unpublishSites,
312
+ };