@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
@@ -1,164 +1,46 @@
1
- #!/usr/bin/env node
2
-
3
- import type { RenderDB } from "../types/render";
4
-
5
- import fsp from "node:fs/promises";
1
+ import fs from "node:fs";
6
2
  import path from "node:path";
7
3
 
8
- import { version as griddoVersion } from "../../package.json";
9
- import { AuthService } from "../services/auth";
10
- import { readDB, writeDB } from "../services/db";
11
- import { doLifeCycle } from "../utils/core-utils";
4
+ import { getConfig } from "../utils/core-utils";
12
5
  import { getInstanceDomains } from "../utils/domains";
13
- import { pathExists, pkgDir, removeDirs } from "../utils/folders";
14
- import { resolveComponentsPath } from "../utils/instance";
15
- import { showExporterVersion } from "../utils/loggin";
16
- import { resolveDomainRenderMode } from "../utils/render";
6
+ import { infoLog, successLog } from "../utils/loggin";
17
7
  import { getSitesToRender } from "../utils/sites";
18
8
 
19
- async function getDomainsWithNumberOfPages(domains: Array<string>) {
20
- const results = await Promise.all(
21
- domains.map(async (domain) => {
22
- // Get the sites to render for the domain
23
- const { sitesToPublish, sitesToUnpublish } = await getSitesToRender(domain);
24
-
25
- // Only count pages (offlinePending && publishPending) if sitesToPublish
26
- // is not empty. Otherwise we set the domain has having 0 pages.
27
- const pages: Array<number> = [];
28
-
29
- if (sitesToPublish.length > 0) {
30
- for (const site of sitesToPublish) {
31
- // el site ya está publicado
32
- if (site.isPublished && !site.shouldBeUpdated) {
33
- const { pagesStatus } = site;
34
- const { offlinePending, uploadPending } = pagesStatus;
35
- const total = offlinePending.length + uploadPending.length;
36
- pages.push(total);
37
- }
38
- // el site esta pendiente de publicar
39
- if (site.isPublished && site.shouldBeUpdated) {
40
- const { pagesStatus } = site;
41
- const { offlinePending, uploadPending, active } = pagesStatus;
42
- const total = offlinePending.length + uploadPending.length + active.length;
43
- pages.push(total);
44
- }
45
- }
46
- } else if (sitesToUnpublish.length > 0) {
47
- // si tiene sites para despublicar marcamos el dominio como que tiene 1 página
48
- pages.push(1);
49
- } else {
50
- // si eldominio no tiene nada ni para publicar ni despublicar lomarcamos como 0
51
- pages.push(0);
52
- }
53
-
54
- const totalPages = pages.reduce((a, b) => a + b);
55
-
56
- return { domain, totalPages };
57
- }),
58
- );
59
-
60
- return results;
61
- }
62
-
63
- function getDomainsSortedByNumberOfPages(
64
- domainsInfo: Array<{
65
- domain: string;
66
- totalPages: number;
67
- }>,
68
- ) {
69
- domainsInfo.sort((a, b) => a.totalPages - b.totalPages);
70
-
71
- return domainsInfo.map(({ domain }) => domain);
72
- }
73
-
74
- async function initRenderAction() {
75
- const root = (await pkgDir({ cwd: path.resolve(__dirname, "../../..") })) || "";
76
- const cx = root;
77
- const ssg = path.resolve((await pkgDir({ cwd: __dirname })) || "");
78
- const cxCache = path.resolve(cx, ".cx-cache");
79
- const components = resolveComponentsPath();
80
- const exportsDir = path.join(root, "exports/sites");
9
+ (async () => {
10
+ infoLog("Checking domains size");
81
11
 
82
- const data: RenderDB = {
83
- proDomain: "pro-",
84
- griddoVersion,
85
- buildReportFileName: "build-report.json",
86
- sortedDomains: [],
87
- domains: {},
88
- paths: {
89
- components,
90
- cx,
91
- cxCache,
92
- exportsDir,
93
- root: root,
94
- ssg,
95
- },
96
- };
97
-
98
- // create the main cache folder for cx if it doesn't exist.
99
- if (!(await pathExists(cxCache))) {
100
- await fsp.mkdir(cxCache, { recursive: true });
101
- }
102
-
103
- await writeDB(data);
104
- }
105
-
106
- async function prepareDomainsAction() {
107
- await AuthService.login();
108
-
109
- // read paths from db
110
- const __ssg = (await readDB()).paths.ssg;
12
+ const { __cx } = getConfig().paths();
111
13
 
112
14
  const domains = await getInstanceDomains();
113
- const domainsWithNumberOfPages = await getDomainsWithNumberOfPages(domains);
114
- const domainSorted = getDomainsSortedByNumberOfPages(domainsWithNumberOfPages);
115
-
116
- // @deprecated use db.json (only for infra)
117
- await fsp.writeFile(path.join(__ssg, "domains.json"), JSON.stringify(domainSorted));
118
-
119
- // new behavior
120
- const db = await readDB();
121
- db.sortedDomains = domainSorted;
122
- db.domains = {};
123
- await writeDB(db);
124
-
125
- for (const { domain, totalPages } of domainsWithNumberOfPages) {
126
- const shouldBeRendered = totalPages > 0;
127
- const { renderMode, reason } = await resolveDomainRenderMode({
128
- domain,
129
- shouldBeRendered,
130
- });
15
+ const domainsInfo = [];
16
+ const domainsFilePath = path.join(__cx, "domains.json");
17
+
18
+ for (const domain of domains) {
19
+ const { sitesToPublish } = await getSitesToRender(domain);
20
+
21
+ // Only count pages (changedPages) if sitesToPublish is not empty.
22
+ // Otherwise we set the domain has having 0 pages.
23
+ const pages = [];
24
+ if (sitesToPublish.length > 0) {
25
+ for (const site of sitesToPublish) {
26
+ pages.push(site.changedPages.length);
27
+ }
28
+ } else {
29
+ pages.push(0);
30
+ }
131
31
 
132
- // Update DB
133
- const db = await readDB();
134
- db.domains[domain] = db.domains[domain] || {};
135
- db.domains[domain].renderMode = renderMode;
136
- db.domains[domain].shouldBeRendered = shouldBeRendered;
137
- db.domains[domain].renderModeReason = reason;
138
- await writeDB(db);
32
+ const totalPages = pages.reduce((a, b) => a + b);
33
+ domainsInfo.push({ domain, totalPages });
139
34
  }
140
- }
141
35
 
142
- async function cleanAction() {
143
- const db = await readDB();
144
- const { cx: __cx } = db.paths;
145
- await removeDirs([path.join(__cx, "apiCache")]);
146
- }
147
-
148
- /**
149
- * Prepare domains to render.
150
- * It creates a `domains.json` file with the sorted list of domains and writes a
151
- * `RENDE-STATE.json` file to persist a state between all cx-infra commands.
152
- */
153
- async function main() {
154
- await showExporterVersion();
36
+ // sort domains, smaller first
37
+ domainsInfo.sort((a, b) => a.totalPages - b.totalPages);
38
+ const domainSorted = domainsInfo.map(({ domain }) => domain);
155
39
 
156
- await doLifeCycle("InitRender", initRenderAction);
157
- await doLifeCycle("PrepareDomains", prepareDomainsAction);
158
- await doLifeCycle("Clean", cleanAction);
159
- }
40
+ fs.writeFileSync(domainsFilePath, JSON.stringify(domainSorted));
160
41
 
161
- main().catch((err) => {
162
- console.error("Error", err?.stdout?.toString() || err);
42
+ successLog(`Checking domains size`);
43
+ })().catch((err) => {
44
+ console.error(err);
163
45
  process.exit(1);
164
46
  });
@@ -1,20 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { RESET_RENDER } from "../constants/endpoints";
4
3
  import { AuthService } from "../services/auth";
5
- import { post } from "../utils/api";
6
- import { doLifeCycle } from "../utils/core-utils";
7
-
8
- async function resetRenderAction() {
9
- await AuthService.login();
10
- await post({
11
- endpoint: RESET_RENDER,
12
- useApiCacheDir: false,
13
- });
14
- }
4
+ import { resetRender } from "../services/settings";
15
5
 
16
6
  async function main() {
17
- await doLifeCycle("ResetRender", resetRenderAction);
7
+ await AuthService.login();
8
+ await resetRender();
18
9
  }
19
10
 
20
11
  main().catch((err) => {
@@ -1,22 +1,55 @@
1
1
  #!/usr/bin/env node
2
+ import { renderDomainsWithGatsbyAdapter } from "../adapters/gatsby";
3
+ import { RenderError } from "../errors";
4
+ import { getInstanceDomains } from "../utils/domains";
5
+ import { errorLabelLog, showExporterVersion } from "../utils/loggin";
6
+ import { sendGriddoDefaultAlerts } from "../utils/render";
2
7
 
3
- import { gatsbyRenderDomain } from "../adapters/gatsby";
4
- import { AuthService } from "../services/auth";
5
- import { checkHealth } from "../utils/check-health";
6
- import { doLifeCycle } from "../utils/core-utils";
7
- import { RenderError } from "../utils/errors";
8
- import { errorLabelLog } from "../utils/loggin";
8
+ const GRIDDO_RENDER_DOMAINS = process.env.GRIDDO_RENDER_DOMAINS || "";
9
+ const RENDER_BY_DOMAIN = process.env.GRIDDO_RENDER_BY_DOMAINS || "";
9
10
 
10
- async function startRenderAction() {
11
- checkHealth();
11
+ async function startRender() {
12
+ try {
13
+ // DOMAINS
14
+ // This block is just for the local instance renders.
15
+ if (GRIDDO_RENDER_DOMAINS) {
16
+ console.log("USANDO EL .ENV");
17
+ showExporterVersion();
18
+ for (const domain of GRIDDO_RENDER_DOMAINS.split(",")) {
19
+ await renderDomainsWithGatsbyAdapter(domain);
20
+ }
21
+ await sendGriddoDefaultAlerts();
22
+ process.exit(0);
23
+ }
12
24
 
13
- await AuthService.login();
25
+ // This will render every domain opposed to the new logic of render each
26
+ // domain separately.
27
+ if (RENDER_BY_DOMAIN) {
28
+ const domain = process.argv.splice(2)[0];
14
29
 
15
- try {
16
- const [domain] = process.argv.slice(2);
17
- await gatsbyRenderDomain(domain);
30
+ if (!domain) {
31
+ console.log("Needs the domain name argument");
32
+ throw new RenderError();
33
+ }
34
+
35
+ showExporterVersion();
36
+ await renderDomainsWithGatsbyAdapter(domain);
37
+ await sendGriddoDefaultAlerts();
38
+
39
+ process.exit(0);
40
+ } else {
41
+ showExporterVersion();
18
42
 
19
- return;
43
+ console.log("( Legacy Render Mode )\n");
44
+
45
+ const domains = await getInstanceDomains();
46
+
47
+ for (const domain of domains) {
48
+ await renderDomainsWithGatsbyAdapter(domain);
49
+ await sendGriddoDefaultAlerts();
50
+ }
51
+ process.exit(0);
52
+ }
20
53
  } catch (error) {
21
54
  if (error instanceof RenderError) {
22
55
  errorLabelLog("GRIDDO_ERROR InternalCXError");
@@ -29,11 +62,7 @@ async function startRenderAction() {
29
62
  }
30
63
  }
31
64
 
32
- async function main() {
33
- await doLifeCycle("StartRender", startRenderAction);
34
- }
35
-
36
- main().catch((err) => {
65
+ startRender().catch((err) => {
37
66
  console.error("Error", err?.stdout?.toString() || err);
38
67
  process.exit(1);
39
68
  });
@@ -1,223 +1,38 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import type { GatsbyPageData } from "../adapters/gatsby/shared/types";
4
- import type { PostSearchInfoResponse } from "../types/api";
5
- import type { AIEmbeddingsResponse, PostSearchInfoProps } from "../types/global";
3
+ import fs from "node:fs";
6
4
 
7
- import fsp from "node:fs/promises";
8
- import path from "node:path";
9
-
10
- import { AI_EMBEDDINGS, SEARCH } from "../constants/endpoints";
11
- import { GRIDDO_AI_EMBEDDINGS, GRIDDO_SEARCH_FEATURE } from "../constants/envs";
12
- import { ReadFromStoreError, UploadSearchError } from "../constants/errors";
13
- import { AuthService } from "../services/auth";
14
- import { readDB } from "../services/db";
15
- import { post } from "../utils/api";
16
- import { doLifeCycle } from "../utils/core-utils";
17
- import { throwError } from "../utils/errors";
18
- import { pathExists } from "../utils/folders";
19
- import { getRenderMode, getRenderPathsFromDB } from "../utils/render";
20
-
21
- /**
22
- * Save in the BBDD the content of a page parsed without HTML tags.
23
- *
24
- * @param props Object with parts of the final page object to be saved in the BBDD.
25
- */
26
- async function postSearchInfo(props: PostSearchInfoProps) {
27
- const { title, description, image, pageId, languageId, siteId, url, content, template } = props;
28
-
29
- const response = await post<PostSearchInfoResponse>({
30
- endpoint: SEARCH,
31
- body: {
32
- title,
33
- description,
34
- image,
35
- pageId,
36
- languageId,
37
- siteId,
38
- url,
39
- template,
40
- content,
41
- },
42
- useApiCacheDir: false,
43
- });
44
-
45
- return response;
46
- }
47
-
48
- function prepareHTMLContentForSearch(content: string): string {
49
- // 1. Remove script, style, and other unwanted block tags and their content.
50
- // The regex looks for <tag...>...</tag> where tag is one of the specified ones.
51
- const tagsToRemove = ["meta", "link", "style", "script", "noscript", "nav", "header", "footer"];
52
- const removeTagsRegex = new RegExp(`<(${tagsToRemove.join("|")})\\b[^>]*>.*?<\\/\\1>`, "gis");
53
- let processedContent = content.replace(removeTagsRegex, "");
54
-
55
- // 2. Strip all remaining HTML tags.
56
- processedContent = processedContent.replace(/<[^>]+>/g, " ");
57
-
58
- // 3. Normalize whitespace: replace multiple spaces/newlines with a single space and trim.
59
- processedContent = processedContent.replace(/\s+/g, " ").trim();
60
-
61
- return processedContent;
62
- }
63
-
64
- /**
65
- * Function that search in the `/public` dir the content info of the pages and
66
- * send it to the search table in the ddbb using the API.
67
- * @todo Utilizar la carpeta page-data en lugar de la carpeta store puesto que
68
- * esta ya no es persistente.
69
- */
70
- async function uploadRenderedSearchContentToAPI(options: {
71
- htmlContentDir: string;
72
- jsonContentDir: string;
73
- }) {
74
- const { htmlContentDir, jsonContentDir } = options;
75
-
76
- if (!(await pathExists(jsonContentDir)) || !(await pathExists(htmlContentDir))) {
77
- console.log(
78
- `Skipping uploading content to the search endpoint because it has not exported sites.`,
79
- );
5
+ import { envs } from "../constants";
6
+ import { getConfig } from "../utils/core-utils";
7
+ import { getInstanceDomains } from "../utils/domains";
8
+ import {
9
+ startAIEmbeddings,
10
+ uploadRenderedSearchContentToAPI,
11
+ } from "../utils/searches";
80
12
 
13
+ async function main() {
14
+ if (!envs.GRIDDO_SEARCH_FEATURE) {
81
15
  return;
82
16
  }
83
17
 
84
- // Get pages from gatsby page-data dir
85
- const gatsbyPageDataPages = getPageDataPagesFromExports(jsonContentDir);
86
-
87
- for await (const pageData of gatsbyPageDataPages) {
88
- const { result } = pageData;
89
- const { pageContext } = result;
90
- const { page, openGraph, pageMetadata } = pageContext;
91
-
92
- const { compose } = page.fullPath;
93
-
94
- const htmlPath = path.resolve(`${htmlContentDir}/${compose}/index.html`);
95
- const htmlContent = await fsp.readFile(htmlPath, "utf-8");
96
-
97
- const pageObject: PostSearchInfoProps = {
98
- siteId: page.site,
99
- pageId: page.id,
100
- // `pageMetadata.title` has already a fallback `metatitle ||
101
- // pageTitle` so probably `title` never will be take the
102
- // `openGraph?.title` value. Only when the `metatitle` and
103
- // `pageTitle` are empty.
104
- title: pageMetadata?.title || openGraph?.title,
105
- languageId: page.language,
106
- url: page.fullUrl,
107
- template: page.template.templateType || page.templateId,
108
- description: pageMetadata?.description || openGraph?.description,
109
- image: openGraph.image,
110
- // _content: prepareHTMLContentForSearch(htmlContent),
111
- content: prepareHTMLContentForSearch(htmlContent),
112
- };
113
-
114
- try {
115
- await postSearchInfo(pageObject);
116
- } catch (error) {
117
- throwError(UploadSearchError, error);
118
- }
119
- }
120
- }
121
-
122
- /**
123
- * Walk recursively in a basePath and return an array of pages with json
124
- * extension with the full absolute path and the path includes "page-data".
125
- *
126
- * @param basePath The path to walk recursively.
127
- * @returns An array of pages with json extension with the full absolute path
128
- * and the path includes "page-data".
129
- */
130
- async function* walkRecursively(basePath: string): AsyncGenerator<string> {
131
- const filesHandle = await fsp.opendir(basePath);
132
-
133
- for await (const fileDirent of filesHandle) {
134
- if (fileDirent.isDirectory()) {
135
- yield* walkRecursively(path.join(basePath, fileDirent.name));
136
- } else if (
137
- fileDirent.isFile() &&
138
- path.extname(fileDirent.name) === ".json" &&
139
- fileDirent.name.includes("page-data")
140
- ) {
141
- yield path.join(basePath, fileDirent.name);
142
- }
143
- }
144
- }
145
-
146
- /**
147
- * Walk recursively in a basePath and return an array of pages with json
148
- * extension with the full absolute path and the path includes "page-data".
149
- *
150
- * @param basePath The path to walk recursively.
151
- * @returns An array of pages with json extension with the full absolute path
152
- * and the path includes "page-data".
153
- */
154
- async function* getPageDataPagesFromExports<PageType extends GatsbyPageData>(
155
- basePath: string,
156
- ): AsyncGenerator<PageType> {
157
- const jsonFiles = walkRecursively(basePath);
158
-
159
- for await (const filePath of jsonFiles) {
160
- try {
161
- const fileContent = await fsp.readFile(filePath, "utf8");
162
- const page = JSON.parse(fileContent) as PageType;
163
-
164
- if (page.path) {
165
- yield page;
166
- }
167
- } catch (error) {
168
- throwError(ReadFromStoreError, error);
169
- }
170
- }
171
- }
172
-
173
- async function getContentDirectories(domain: string) {
174
- const { __exports } = await getRenderPathsFromDB({ domain });
175
-
176
- return {
177
- htmlContentDir: path.join(__exports, "dist"),
178
- jsonContentDir: path.join(__exports, "dist", "page-data"),
179
- };
180
- }
181
-
182
- async function uploadSearchContent() {
183
- const db = await readDB();
184
- const domains = db.sortedDomains;
18
+ const domains = await getInstanceDomains();
19
+ const config = getConfig();
185
20
  for (const domain of domains) {
186
- const { renderMode } = await getRenderMode(domain);
187
- if (renderMode !== "IDLE" && GRIDDO_SEARCH_FEATURE) {
188
- const { htmlContentDir, jsonContentDir } = await getContentDirectories(domain);
189
- await uploadRenderedSearchContentToAPI({
190
- htmlContentDir,
191
- jsonContentDir,
192
- });
21
+ const { __exports_dist } = config.paths(domain);
22
+
23
+ // If __exports_dist has not exported sites (directories), it does not
24
+ // upload search content.
25
+ if (fs.existsSync(__exports_dist)) {
26
+ await uploadRenderedSearchContentToAPI(__exports_dist, domain);
193
27
  }
194
28
  }
195
- }
196
29
 
197
- // async function uploadSearchContentByDomain(domain: string) {
198
- // const renderMode = await getRenderMode(domain);
199
- // if (renderMode !== "IDLE" && GRIDDO_SEARCH_FEATURE) {
200
- // const { htmlContentDir, jsonContentDir } = await getContentDirectories(domain);
201
- // await uploadRenderedSearchContentToAPI({ htmlContentDir, jsonContentDir });
202
- // }
203
- // }
204
-
205
- async function aiEmbeddingsAction() {
206
- if (GRIDDO_SEARCH_FEATURE && GRIDDO_AI_EMBEDDINGS) {
207
- await AuthService.login();
208
-
209
- await post<AIEmbeddingsResponse>({
210
- endpoint: AI_EMBEDDINGS,
211
- useApiCacheDir: false,
212
- });
30
+ // Solo una vez en cada render de todos los dominios...
31
+ if (envs.GRIDDO_AI_EMBEDDINGS) {
32
+ await startAIEmbeddings();
213
33
  }
214
34
  }
215
35
 
216
- async function main() {
217
- await doLifeCycle("UploadSearch", () => uploadSearchContent());
218
- await doLifeCycle("AIEmbeddings", aiEmbeddingsAction);
219
- }
220
-
221
36
  main().catch((err) => {
222
37
  console.error("Error", err?.stdout?.toString() || err);
223
38
  process.exit(1);