@griddo/cx 11.7.6 → 11.7.7-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (280) hide show
  1. package/README.md +27 -226
  2. package/build/adapters/gatsby/actions/clean.js +10 -0
  3. package/build/adapters/gatsby/actions/clean.js.map +1 -0
  4. package/build/adapters/gatsby/actions/close.js +12 -0
  5. package/build/adapters/gatsby/actions/close.js.map +1 -0
  6. package/build/adapters/gatsby/actions/data.js +18 -0
  7. package/build/adapters/gatsby/actions/data.js.map +1 -0
  8. package/build/adapters/gatsby/actions/healthCheck.js +10 -0
  9. package/build/adapters/gatsby/actions/healthCheck.js.map +1 -0
  10. package/build/adapters/gatsby/actions/init.js +9 -0
  11. package/build/adapters/gatsby/actions/init.js.map +1 -0
  12. package/build/adapters/gatsby/actions/meta.js +14 -0
  13. package/build/adapters/gatsby/actions/meta.js.map +1 -0
  14. package/build/adapters/gatsby/actions/prepare.js +9 -0
  15. package/build/adapters/gatsby/actions/prepare.js.map +1 -0
  16. package/build/adapters/gatsby/actions/relocation.js +15 -0
  17. package/build/adapters/gatsby/actions/relocation.js.map +1 -0
  18. package/build/adapters/gatsby/actions/restore.js +26 -0
  19. package/build/adapters/gatsby/actions/restore.js.map +1 -0
  20. package/build/adapters/gatsby/actions/ssg.js +9 -0
  21. package/build/adapters/gatsby/actions/ssg.js.map +1 -0
  22. package/build/adapters/gatsby/actions/sync.js +51 -0
  23. package/build/adapters/gatsby/actions/sync.js.map +1 -0
  24. package/build/adapters/gatsby/index.js +79 -0
  25. package/build/adapters/gatsby/index.js.map +1 -0
  26. package/build/adapters/gatsby/shared/context.js +31 -0
  27. package/build/adapters/gatsby/shared/context.js.map +1 -0
  28. package/build/adapters/gatsby/shared/diff-assets.js +101 -0
  29. package/build/adapters/gatsby/shared/diff-assets.js.map +1 -0
  30. package/build/adapters/gatsby/shared/extract-assets.js +58 -0
  31. package/build/adapters/gatsby/shared/extract-assets.js.map +1 -0
  32. package/build/adapters/gatsby/shared/gatsby-build.js +49 -0
  33. package/build/adapters/gatsby/shared/gatsby-build.js.map +1 -0
  34. package/build/adapters/gatsby/shared/sync-render.js +210 -0
  35. package/build/adapters/gatsby/shared/sync-render.js.map +1 -0
  36. package/build/adapters/gatsby/shared/types.js +3 -0
  37. package/build/adapters/gatsby/shared/types.js.map +1 -0
  38. package/build/commands/end-render.js +88 -0
  39. package/build/commands/end-render.js.map +1 -0
  40. package/build/commands/prepare-assets-directory.js +32 -0
  41. package/build/commands/prepare-assets-directory.js.map +1 -0
  42. package/build/commands/prepare-domains-render.js +133 -0
  43. package/build/commands/prepare-domains-render.js.map +1 -0
  44. package/build/commands/reset-render.js +22 -0
  45. package/build/commands/reset-render.js.map +1 -0
  46. package/build/commands/start-render.js +45 -0
  47. package/build/commands/start-render.js.map +1 -0
  48. package/build/commands/upload-search-content.js +180 -0
  49. package/build/commands/upload-search-content.js.map +1 -0
  50. package/build/constants/endpoints.js +42 -0
  51. package/build/constants/endpoints.js.map +1 -0
  52. package/build/constants/envs.js +68 -0
  53. package/build/constants/envs.js.map +1 -0
  54. package/build/constants/errors.js +81 -0
  55. package/build/constants/errors.js.map +1 -0
  56. package/build/services/auth.js +40 -0
  57. package/build/services/auth.js.map +1 -0
  58. package/build/services/db-class.js +49 -0
  59. package/build/services/db-class.js.map +1 -0
  60. package/build/services/db.js +34 -0
  61. package/build/services/db.js.map +1 -0
  62. package/build/services/navigation.js +96 -0
  63. package/build/services/navigation.js.map +1 -0
  64. package/build/services/reference-fields.js +131 -0
  65. package/build/services/reference-fields.js.map +1 -0
  66. package/build/services/robots.js +60 -0
  67. package/build/services/robots.js.map +1 -0
  68. package/build/services/sites.js +109 -0
  69. package/build/services/sites.js.map +1 -0
  70. package/build/services/store.js +282 -0
  71. package/build/services/store.js.map +1 -0
  72. package/build/types/api.js +3 -0
  73. package/build/types/api.js.map +1 -0
  74. package/build/types/global.js +3 -0
  75. package/build/types/global.js.map +1 -0
  76. package/build/types/navigation.js +3 -0
  77. package/build/types/navigation.js.map +1 -0
  78. package/build/types/pages.js +3 -0
  79. package/build/types/pages.js.map +1 -0
  80. package/build/types/render.js +10 -0
  81. package/build/types/render.js.map +1 -0
  82. package/build/types/sites.js +3 -0
  83. package/build/types/sites.js.map +1 -0
  84. package/build/types/templates.js +3 -0
  85. package/build/types/templates.js.map +1 -0
  86. package/build/utils/api.js +161 -0
  87. package/build/utils/api.js.map +1 -0
  88. package/build/utils/artifacts.js +34 -0
  89. package/build/utils/artifacts.js.map +1 -0
  90. package/build/utils/brush.js +30 -0
  91. package/build/utils/brush.js.map +1 -0
  92. package/build/utils/cache.js +106 -0
  93. package/build/utils/cache.js.map +1 -0
  94. package/build/utils/check-health.js +68 -0
  95. package/build/utils/check-health.js.map +1 -0
  96. package/build/utils/core-utils.js +283 -0
  97. package/build/utils/core-utils.js.map +1 -0
  98. package/build/utils/domains.js +37 -0
  99. package/build/utils/domains.js.map +1 -0
  100. package/build/utils/errors.js +30 -0
  101. package/build/utils/errors.js.map +1 -0
  102. package/build/utils/folders.js +362 -0
  103. package/build/utils/folders.js.map +1 -0
  104. package/build/utils/images.js +45 -0
  105. package/build/utils/images.js.map +1 -0
  106. package/build/utils/instance.js +66 -0
  107. package/build/utils/instance.js.map +1 -0
  108. package/build/utils/loggin.js +108 -0
  109. package/build/utils/loggin.js.map +1 -0
  110. package/build/utils/pages.js +359 -0
  111. package/build/utils/pages.js.map +1 -0
  112. package/build/utils/render.js +144 -0
  113. package/build/utils/render.js.map +1 -0
  114. package/build/utils/sites.js +240 -0
  115. package/build/utils/sites.js.map +1 -0
  116. package/build/utils/store.js +193 -0
  117. package/build/utils/store.js.map +1 -0
  118. package/exporter/adapters/gatsby/actions/clean.ts +14 -0
  119. package/exporter/adapters/gatsby/actions/close.ts +17 -0
  120. package/exporter/adapters/gatsby/actions/data.ts +25 -0
  121. package/exporter/adapters/gatsby/actions/healthCheck.ts +10 -0
  122. package/exporter/adapters/gatsby/actions/init.ts +12 -0
  123. package/exporter/adapters/gatsby/actions/meta.ts +18 -0
  124. package/exporter/adapters/gatsby/actions/prepare.ts +9 -0
  125. package/exporter/adapters/gatsby/actions/relocation.ts +15 -0
  126. package/exporter/adapters/gatsby/actions/restore.ts +36 -0
  127. package/exporter/adapters/gatsby/actions/ssg.ts +12 -0
  128. package/exporter/adapters/gatsby/actions/sync.ts +71 -0
  129. package/exporter/adapters/gatsby/index.ts +67 -147
  130. package/exporter/adapters/gatsby/shared/context.ts +50 -0
  131. package/exporter/adapters/gatsby/shared/diff-assets.ts +113 -0
  132. package/exporter/adapters/gatsby/shared/extract-assets.ts +61 -0
  133. package/exporter/adapters/gatsby/shared/gatsby-build.ts +54 -0
  134. package/exporter/adapters/gatsby/shared/sync-render.ts +276 -0
  135. package/exporter/adapters/gatsby/shared/types.ts +35 -0
  136. package/exporter/build-esbuild.noop +42 -0
  137. package/exporter/build.sh +4 -38
  138. package/exporter/commands/end-render.ts +73 -69
  139. package/exporter/commands/prepare-assets-directory.ts +33 -0
  140. package/exporter/commands/prepare-domains-render.ts +144 -31
  141. package/exporter/commands/reset-render.ts +10 -1
  142. package/exporter/commands/start-render.ts +23 -44
  143. package/exporter/commands/upload-search-content.ts +194 -20
  144. package/exporter/constants/envs.ts +57 -55
  145. package/exporter/{errors/errors-data.ts → constants/errors.ts} +24 -14
  146. package/exporter/services/auth.ts +7 -6
  147. package/exporter/services/db-class.ts +54 -0
  148. package/exporter/services/db.ts +32 -0
  149. package/exporter/services/navigation.ts +4 -10
  150. package/exporter/services/reference-fields.ts +8 -23
  151. package/exporter/services/robots.ts +9 -16
  152. package/exporter/services/sites.ts +35 -24
  153. package/exporter/services/store.ts +120 -78
  154. package/exporter/types/api.ts +24 -27
  155. package/exporter/types/global.ts +7 -10
  156. package/exporter/types/navigation.ts +1 -1
  157. package/exporter/types/pages.ts +2 -3
  158. package/exporter/types/render.ts +59 -0
  159. package/exporter/types/sites.ts +1 -2
  160. package/exporter/utils/api.ts +46 -82
  161. package/exporter/utils/artifacts.ts +34 -0
  162. package/exporter/utils/brush.ts +34 -0
  163. package/exporter/utils/cache.ts +37 -62
  164. package/exporter/utils/check-health.ts +79 -0
  165. package/exporter/utils/core-utils.ts +129 -248
  166. package/exporter/utils/domains.ts +10 -7
  167. package/exporter/{errors/index.ts → utils/errors.ts} +10 -9
  168. package/exporter/utils/folders.ts +187 -95
  169. package/exporter/utils/images.ts +1 -6
  170. package/exporter/utils/instance.ts +9 -12
  171. package/exporter/utils/loggin.ts +32 -91
  172. package/exporter/utils/pages.ts +23 -88
  173. package/exporter/utils/render.ts +149 -48
  174. package/exporter/utils/sites.ts +81 -90
  175. package/exporter/utils/store.ts +87 -180
  176. package/gatsby-browser.tsx +41 -58
  177. package/gatsby-config.ts +6 -12
  178. package/gatsby-node.ts +15 -77
  179. package/gatsby-ssr.tsx +2 -1
  180. package/package.json +36 -78
  181. package/plugins/gatsby-plugin-svgr-loader/gatsby-node.js +55 -0
  182. package/plugins/gatsby-plugin-svgr-loader/package.json +8 -0
  183. package/{exporter/react → react}/Favicon/index.tsx +1 -7
  184. package/{exporter/react → react}/GriddoIntegrations/index.tsx +6 -14
  185. package/{exporter/react → react}/GriddoIntegrations/utils.ts +4 -9
  186. package/{build/react/index.d.ts → react/index.tsx} +1 -0
  187. package/src/components/Head.tsx +13 -46
  188. package/src/components/template.tsx +8 -30
  189. package/src/gatsby-node-utils.ts +91 -2
  190. package/src/html.tsx +2 -11
  191. package/src/types.ts +5 -5
  192. package/tsconfig.json +5 -3
  193. package/build/adapters/gatsby/index.d.ts +0 -4
  194. package/build/adapters/gatsby/utils.d.ts +0 -22
  195. package/build/artifacts/index.d.ts +0 -6
  196. package/build/commands/end-render.d.ts +0 -2
  197. package/build/commands/move-assets.d.ts +0 -1
  198. package/build/commands/prepare-domains-render.d.ts +0 -1
  199. package/build/commands/reset-render.d.ts +0 -2
  200. package/build/commands/start-render.d.ts +0 -2
  201. package/build/commands/upload-search-content.d.ts +0 -2
  202. package/build/constants/endpoints.d.ts +0 -19
  203. package/build/constants/envs.d.ts +0 -37
  204. package/build/constants/index.d.ts +0 -57
  205. package/build/end-render.js +0 -74
  206. package/build/end-render.js.map +0 -7
  207. package/build/errors/errors-data.d.ts +0 -22
  208. package/build/errors/index.d.ts +0 -15
  209. package/build/index.d.ts +0 -29
  210. package/build/index.js +0 -73
  211. package/build/index.js.map +0 -7
  212. package/build/prepare-domains-render.js +0 -73
  213. package/build/prepare-domains-render.js.map +0 -7
  214. package/build/react/Favicon/index.d.ts +0 -5
  215. package/build/react/Favicon/utils.d.ts +0 -9
  216. package/build/react/GriddoIntegrations/index.d.ts +0 -20
  217. package/build/react/GriddoIntegrations/utils.d.ts +0 -26
  218. package/build/react/index.js +0 -3
  219. package/build/registers/api.d.ts +0 -9
  220. package/build/registers/gatsby.d.ts +0 -9
  221. package/build/registers/index.d.ts +0 -3
  222. package/build/reset-render.js +0 -74
  223. package/build/reset-render.js.map +0 -7
  224. package/build/services/auth.d.ts +0 -10
  225. package/build/services/domains.d.ts +0 -6
  226. package/build/services/navigation.d.ts +0 -50
  227. package/build/services/reference-fields.d.ts +0 -20
  228. package/build/services/register.d.ts +0 -36
  229. package/build/services/robots.d.ts +0 -19
  230. package/build/services/settings.d.ts +0 -4
  231. package/build/services/sites.d.ts +0 -29
  232. package/build/services/store.d.ts +0 -6
  233. package/build/start-render.js +0 -100
  234. package/build/start-render.js.map +0 -7
  235. package/build/types/api.d.ts +0 -142
  236. package/build/types/global.d.ts +0 -84
  237. package/build/types/navigation.d.ts +0 -28
  238. package/build/types/pages.d.ts +0 -144
  239. package/build/types/sites.d.ts +0 -57
  240. package/build/types/templates.d.ts +0 -8
  241. package/build/upload-search-content.js +0 -74
  242. package/build/upload-search-content.js.map +0 -7
  243. package/build/utils/alerts.d.ts +0 -3
  244. package/build/utils/api.d.ts +0 -23
  245. package/build/utils/cache.d.ts +0 -35
  246. package/build/utils/core-utils.d.ts +0 -107
  247. package/build/utils/create-build-data.d.ts +0 -8
  248. package/build/utils/domains.d.ts +0 -13
  249. package/build/utils/folders.d.ts +0 -53
  250. package/build/utils/health-checks.d.ts +0 -7
  251. package/build/utils/images.d.ts +0 -16
  252. package/build/utils/instance.d.ts +0 -21
  253. package/build/utils/loggin.d.ts +0 -51
  254. package/build/utils/pages.d.ts +0 -34
  255. package/build/utils/render.d.ts +0 -13
  256. package/build/utils/searches.d.ts +0 -15
  257. package/build/utils/sites.d.ts +0 -31
  258. package/build/utils/store.d.ts +0 -81
  259. package/cx.config.d.ts +0 -5
  260. package/cx.config.js +0 -36
  261. package/exporter/adapters/gatsby/utils.ts +0 -161
  262. package/exporter/artifacts/README.md +0 -34
  263. package/exporter/artifacts/index.ts +0 -33
  264. package/exporter/commands/move-assets.ts +0 -11
  265. package/exporter/constants/index.ts +0 -129
  266. package/exporter/index.ts +0 -82
  267. package/exporter/react/index.tsx +0 -11
  268. package/exporter/registers/api.ts +0 -14
  269. package/exporter/registers/gatsby.ts +0 -14
  270. package/exporter/registers/index.ts +0 -4
  271. package/exporter/services/domains.ts +0 -16
  272. package/exporter/services/register.ts +0 -113
  273. package/exporter/services/settings.ts +0 -17
  274. package/exporter/utils/alerts.ts +0 -29
  275. package/exporter/utils/create-build-data.ts +0 -17
  276. package/exporter/utils/health-checks.ts +0 -64
  277. package/exporter/utils/searches.ts +0 -156
  278. package/src/README.md +0 -7
  279. package/start-render.js +0 -7
  280. /package/{exporter/react → react}/Favicon/utils.ts +0 -0
@@ -1,4 +1,4 @@
1
- import type { BuildProcessData } from "../types/global";
1
+ import type { BuildProcessData, Settings } from "../types/global";
2
2
  import type {
3
3
  GriddoListPage,
4
4
  GriddoMultiPage,
@@ -6,20 +6,24 @@ import type {
6
6
  GriddoSinglePage,
7
7
  PageAdditionalInfo,
8
8
  } from "../types/pages";
9
+ import type { RenderMode } from "../types/render";
9
10
 
10
- import fs from "node:fs";
11
+ import fsp from "node:fs/promises";
11
12
  import path from "node:path";
12
13
 
13
14
  import pLimit from "p-limit";
14
15
 
15
- import { envs } from "../constants";
16
- import { NavigationService } from "./navigation";
17
- import { getReferenceFieldData } from "./reference-fields";
18
- import { getAllSettings } from "./settings";
19
- import { getPage } from "./sites";
16
+ import { SETTINGS } from "../constants/endpoints";
17
+ import {
18
+ GRIDDO_API_CONCURRENCY_COUNT,
19
+ GRIDDO_API_URL,
20
+ GRIDDO_PUBLIC_API_URL,
21
+ GRIDDO_REACT_APP_INSTANCE,
22
+ } from "../constants/envs";
23
+ import { get } from "../utils/api";
20
24
  import { updatedSiteHash } from "../utils/cache";
21
- import { getConfig, removeAllSiteDirsFromStore } from "../utils/core-utils";
22
- import { buildLog, listSitesLog } from "../utils/loggin";
25
+ import { removeAllSiteDirsFromStore } from "../utils/core-utils";
26
+ import { infoLog, listSitesLog } from "../utils/loggin";
23
27
  import {
24
28
  createGriddoListPages,
25
29
  createGriddoMultiPages,
@@ -29,26 +33,38 @@ import {
29
33
  } from "../utils/pages";
30
34
  import { getSiteData, getSitesToRender, unpublishSites } from "../utils/sites";
31
35
  import {
32
- getMissingPublishedPagesInStore,
33
36
  getZombiePagesInStore,
34
37
  removeOrphanSites,
35
38
  removeSitePagesFromStore,
36
39
  saveRenderInfoInStore,
37
40
  saveSitePagesInStore,
38
41
  } from "../utils/store";
42
+ import { NavigationService } from "./navigation";
43
+ import { getReferenceFieldData } from "./reference-fields";
44
+ import { getPage } from "./sites";
39
45
 
40
- const renderId = new Date().valueOf().toString();
41
- const { griddoVersion, paths } = getConfig();
42
- const { __cx } = paths();
43
- const storeDir = path.join(__cx, "store");
46
+ const renderId = Date.now().toString();
47
+
48
+ function guessSiteNeedsToBeRenderedFromScratch() {
49
+ return false;
50
+ }
44
51
 
45
52
  /**
46
53
  * Fetch, process and save object pages and sites data into the file system to
47
54
  * be consumed by other services (Griddo itself, Adapters, etc.)
48
55
  */
49
- async function createStore(domain: string) {
50
- console.info(`API calls with ${envs.GRIDDO_API_CONCURRENCY_COUNT} threads`);
51
- console.info(`API URL ${envs.GRIDDO_API_URL as string}`);
56
+ async function createStore(options: {
57
+ domain: string;
58
+ renderMode: RenderMode;
59
+ griddoVersion: string;
60
+ basePath: string;
61
+ }) {
62
+ console.info(`API calls with ${GRIDDO_API_CONCURRENCY_COUNT} threads`);
63
+ console.info(`API URL ${GRIDDO_API_URL as string}`);
64
+
65
+ const { renderMode, domain, griddoVersion, basePath } = options;
66
+ const renderFromScratch = renderMode === "FROM_SCRATCH";
67
+ const storeDir = path.join(basePath, "store");
52
68
 
53
69
  try {
54
70
  // Vars to save later in the report file
@@ -58,8 +74,7 @@ async function createStore(domain: string) {
58
74
  // Get sites objects to publish and unpublish from this domain
59
75
  const { sitesToPublish, sitesToUnpublish } = await getSitesToRender(domain);
60
76
 
61
- const domainHasSites =
62
- sitesToPublish.length > 0 || sitesToUnpublish.length > 0;
77
+ const domainHasSites = sitesToPublish.length > 0 || sitesToUnpublish.length > 0;
63
78
 
64
79
  if (!domainHasSites) {
65
80
  console.warn(`There are no sites to update in the domain ${domain}`);
@@ -69,20 +84,39 @@ async function createStore(domain: string) {
69
84
  listSitesLog("Sites to unpublish:", sitesToUnpublish);
70
85
 
71
86
  // Send unpublished sites to API.
72
- // @todo ¿mover esta llamada al final del proceso de render?
73
- // Aquí también se están eliminado físicamente los archivos json del
74
- // store de los sites para despublicar.
75
87
  await unpublishSites(sitesToUnpublish);
76
88
 
77
89
  // Eliminamos posibles sites que estén en el store pero que no deberían
78
90
  // porque han sido cambiados de dominio. Si han sido despublicados ya se
79
91
  // despublican bien porque entran en `sitesToUnpublish`
80
- removeOrphanSites(sitesToPublish, domain);
92
+ await removeOrphanSites(sitesToPublish, domain);
93
+
94
+ const allPagesToRemoveFromBuild: Array<number> = [];
95
+ // let numberOfFinalActivePages: Array<number> = [];
96
+
97
+ for (const site of sitesToUnpublish) {
98
+ const { pagesStatus } = site;
99
+
100
+ // Añadimos a allPagesToRemoveFromBuild todas las páginas de un site
101
+ // para despublicar.
102
+ allPagesToRemoveFromBuild.push(
103
+ ...pagesStatus.active,
104
+ ...pagesStatus.offlinePending,
105
+ ...pagesStatus.uploadPending,
106
+ ...pagesStatus.deleted,
107
+ ...pagesStatus.offline,
108
+ );
109
+ }
81
110
 
82
- // Solo los sites to publish...
83
111
  for (const site of sitesToPublish) {
84
112
  const { id: siteId, slug: siteSlug, theme, favicon, pagesStatus } = site;
85
113
  const siteDirName = siteId.toString();
114
+ // numberOfFinalActivePages.push(
115
+ // ...pagesStatus.active,
116
+ // ...pagesStatus.uploadPending,
117
+ // );
118
+
119
+ allPagesToRemoveFromBuild.push(...pagesStatus.offlinePending, ...pagesStatus.deleted);
86
120
 
87
121
  const {
88
122
  siteInfo,
@@ -104,7 +138,7 @@ async function createStore(domain: string) {
104
138
  avoidSelfReferenceCanonicals,
105
139
  avoidHrefLangXDefault,
106
140
  avoidDebugMetas,
107
- } = await getAllSettings();
141
+ } = await get<Settings>({ endpoint: SETTINGS });
108
142
 
109
143
  buildProcessData[siteId] = {
110
144
  siteHash,
@@ -118,7 +152,7 @@ async function createStore(domain: string) {
118
152
 
119
153
  site.languages = siteLangs;
120
154
 
121
- const shouldUpdateSite = updatedSiteHash(siteId, siteHash);
155
+ const shouldUpdateSite = await updatedSiteHash(siteId, siteHash);
122
156
 
123
157
  const siteScript = siteInfo.siteScript;
124
158
 
@@ -129,9 +163,9 @@ async function createStore(domain: string) {
129
163
  };
130
164
 
131
165
  const additionalInfo = {
132
- baseUrl: envs.GRIDDO_API_URL,
133
- publicBaseUrl: envs.GRIDDO_PUBLIC_API_URL,
134
- instance: envs.GRIDDO_REACT_APP_INSTANCE,
166
+ baseUrl: GRIDDO_API_URL,
167
+ publicBaseUrl: GRIDDO_PUBLIC_API_URL,
168
+ instance: GRIDDO_REACT_APP_INSTANCE,
135
169
  siteSlug,
136
170
  theme,
137
171
  siteMetadata,
@@ -151,10 +185,10 @@ async function createStore(domain: string) {
151
185
  siteScript,
152
186
  };
153
187
 
154
- buildLog(`${site.name} site`);
188
+ infoLog(`Getting pages from ${site.name} site`);
155
189
 
156
190
  /// Creates the store directory for each site using the id
157
- fs.mkdirSync(path.join(storeDir, siteDirName), {
191
+ await fsp.mkdir(path.join(storeDir, siteDirName), {
158
192
  recursive: true,
159
193
  });
160
194
 
@@ -163,10 +197,7 @@ async function createStore(domain: string) {
163
197
  // -------------------------------------------------------------------------
164
198
  // Async function that process every page for one site to use later in the
165
199
  // `Promise.all` with pLimit.
166
- const fetchSitePageAndSaveInStore = async (
167
- siteIdName: string,
168
- pageId: number,
169
- ) => {
200
+ const fetchSitePageAndSaveInStore = async (siteIdName: string, pageId: number) => {
170
201
  // Here will be store every page returned by the API and processed
171
202
  let griddoPageObjects: Array<GriddoPageObject> = [];
172
203
 
@@ -185,9 +216,7 @@ async function createStore(domain: string) {
185
216
  // SHAME: This new pageAdditionalInfo needs to be a copy because
186
217
  // additionalInfo referenced from outside this function and
187
218
  // its used by other pages.
188
- const pageAdditionalInfo = JSON.parse(
189
- JSON.stringify(additionalInfo),
190
- ) as PageAdditionalInfo;
219
+ const pageAdditionalInfo = JSON.parse(JSON.stringify(additionalInfo)) as PageAdditionalInfo;
191
220
 
192
221
  // Updated with navigations (header & footer)
193
222
  pageAdditionalInfo.navigations = NavService.getPageNavigations(page);
@@ -217,8 +246,7 @@ async function createStore(domain: string) {
217
246
  // - Single: just one page
218
247
 
219
248
  // Griddo page types
220
- const isStaticListPage =
221
- page?.mode === "list" || page?.mode === "paginated-data";
249
+ const isStaticListPage = page?.mode === "list" || page?.mode === "paginated-data";
222
250
  const isMultiPage = !isStaticListPage && multiPageElements;
223
251
  const isSinglePage = !isMultiPage && !isStaticListPage;
224
252
 
@@ -234,10 +262,12 @@ async function createStore(domain: string) {
234
262
  } as GriddoListPage;
235
263
 
236
264
  // pageObjects = await createGriddoListPages({ adapter: "Gatsby" })
237
- griddoPageObjects = await createGriddoListPages(
238
- griddoListPage,
239
- pageAdditionalInfo,
240
- );
265
+ griddoPageObjects = await createGriddoListPages(griddoListPage, pageAdditionalInfo);
266
+
267
+ // ¿Por qué la añadimos a las páginas para borrar?
268
+ // Porque este tipo de páginas no está manejada por API y se crean varias páginas con el mismo ID.
269
+ // Esto hace que no se pueda rastrear bien el render.
270
+ allPagesToRemoveFromBuild.push(page.id);
241
271
  }
242
272
 
243
273
  // >> Multi-page <<
@@ -249,10 +279,12 @@ async function createStore(domain: string) {
249
279
  griddoMultipage.multiPageElements = multiPageElements;
250
280
  griddoMultipage.defaultLang = defaultLang;
251
281
 
252
- griddoPageObjects = await createGriddoMultiPages(
253
- griddoMultipage,
254
- pageAdditionalInfo,
255
- );
282
+ griddoPageObjects = await createGriddoMultiPages(griddoMultipage, pageAdditionalInfo);
283
+
284
+ // ¿Por qué la añadimos a las páginas para borrar?
285
+ // Porque este tipo de páginas no está manejada por API y se crean varias páginas con el mismo ID.
286
+ // Esto hace que no se pueda rastrear bien el render.
287
+ allPagesToRemoveFromBuild.push(page.id);
256
288
  }
257
289
 
258
290
  // >> Single template <<
@@ -263,9 +295,7 @@ async function createStore(domain: string) {
263
295
  griddoSinglePage.template = template;
264
296
  griddoSinglePage.defaultLang = defaultLang;
265
297
 
266
- griddoPageObjects = [
267
- await createGriddoSinglePage(griddoSinglePage, pageAdditionalInfo),
268
- ];
298
+ griddoPageObjects = [await createGriddoSinglePage(griddoSinglePage, pageAdditionalInfo)];
269
299
  }
270
300
 
271
301
  // Upload only the valid pages hashes or ids of pages that has
@@ -276,25 +306,26 @@ async function createStore(domain: string) {
276
306
  }
277
307
 
278
308
  // Save build data to store
279
- saveSitePagesInStore(siteIdName, griddoPageObjects);
309
+ await saveSitePagesInStore(siteIdName, griddoPageObjects);
280
310
  };
281
311
 
282
- // Pages that needs to be fetched from the API and written to the
283
- // store.
284
- const pagesToFetchFromAPI = [
285
- // These pages are news or has been updated.
286
- ...pagesStatus.uploadPending,
287
- // You should take into account the pages that, even though they are
288
- // already published and therefore should be avoided from requesting
289
- // them to the API, are not in the store, probably due to a failed
290
- // render. In that case, you have to request them again from the API
291
- // to include them in the store.
292
- ...getMissingPublishedPagesInStore(siteDirName, pagesStatus.active),
293
- ];
312
+ // Pages that needs to be fetched from the API and written to the store.
313
+ const pagesToFetchFromAPI = pagesStatus.uploadPending;
314
+
315
+ // Esto es necesario porque en la BBDD las páginas pueden estar
316
+ // marcadas como activas (online) pero si es una máquina nueva hace
317
+ // falta hacerlas de nuevo...
318
+ // const sitePendingOfPublishing = site.isPublished && site.shouldBeUpdated;
319
+ const sitePendingOfPublishing = guessSiteNeedsToBeRenderedFromScratch();
320
+ // @todo: necesito tener un sistema par publicar todo de un site (cuando un site esté pending to publish)
321
+ // algo como site.status = pending | published | unpublished...
322
+ if (renderFromScratch || sitePendingOfPublishing) {
323
+ pagesToFetchFromAPI.push(...pagesStatus.active);
324
+ }
294
325
 
295
326
  // Create pages to the store. First requesting from API,
296
327
  // transform, etc., and then writing them to disk.
297
- const limit = pLimit(envs.GRIDDO_API_CONCURRENCY_COUNT);
328
+ const limit = pLimit(GRIDDO_API_CONCURRENCY_COUNT);
298
329
  const pagesToStore = pagesToFetchFromAPI.map((id: number) =>
299
330
  limit(() => fetchSitePageAndSaveInStore(siteDirName, id)),
300
331
  );
@@ -302,13 +333,13 @@ async function createStore(domain: string) {
302
333
  await Promise.all(pagesToStore);
303
334
 
304
335
  // @ts-expect-error Mutate pagesStatus for reading pourposes.
305
- pagesStatus.zombie = getZombiePagesInStore(siteDirName, [
336
+ pagesStatus.zombie = await getZombiePagesInStore(siteDirName, [
306
337
  ...pagesStatus.active,
307
338
  ...pagesStatus.uploadPending,
308
339
  ]);
309
340
 
310
341
  // Delete pages from the store removing them from disk.
311
- removeSitePagesFromStore(siteDirName, [
342
+ await removeSitePagesFromStore(siteDirName, [
312
343
  pagesStatus.deleted,
313
344
  pagesStatus.offline,
314
345
  pagesStatus.offlinePending,
@@ -336,20 +367,31 @@ async function createStore(domain: string) {
336
367
 
337
368
  if (domainHasSites) {
338
369
  // ( 1 )
339
- saveRenderInfoInStore({
340
- buildProcessData,
341
- createdPages,
342
- sitesToPublish,
343
- });
370
+ await saveRenderInfoInStore(
371
+ {
372
+ buildProcessData,
373
+ createdPages,
374
+ sitesToPublish,
375
+ },
376
+ domain,
377
+ );
344
378
  } else {
345
379
  // ( 2 )
346
- removeAllSiteDirsFromStore();
347
- saveRenderInfoInStore({
348
- buildProcessData,
349
- createdPages: [],
350
- sitesToPublish: [],
351
- });
380
+ await removeAllSiteDirsFromStore();
381
+ await saveRenderInfoInStore(
382
+ {
383
+ buildProcessData,
384
+ createdPages: [],
385
+ sitesToPublish: [],
386
+ },
387
+ domain,
388
+ );
352
389
  }
390
+
391
+ return {
392
+ pagesToCreate: createdPages,
393
+ pagesToDelete: allPagesToRemoveFromBuild,
394
+ };
353
395
  } catch (e) {
354
396
  const error = e as { message: string };
355
397
  console.error(error.message);
@@ -1,7 +1,7 @@
1
+ import type { Core, Fields } from "@griddo/core";
1
2
  import type { Domains, Robots, Settings } from "./global";
2
3
  import type { APIPageObject } from "./pages";
3
4
  import type { Site } from "./sites";
4
- import type { Core, Fields } from "@griddo/core";
5
5
 
6
6
  /** EndSiteRender Body */
7
7
  export type EndSiteRenderBody = {
@@ -29,29 +29,28 @@ export interface ReferenceFieldBody {
29
29
  }
30
30
 
31
31
  /** Describes the props of the body object for the get page */
32
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
33
- interface PageBody {
34
- /** The title of the page. */
35
- title?: string;
36
- /** The description of the page. */
37
- description?: string;
38
- /** The URL of the page's image. */
39
- image?: string;
40
- /** The ID of the page. */
41
- pageId?: number;
42
- /** The ID of the page's language. */
43
- languageId?: number;
44
- /** The ID of the page's site. */
45
- siteId?: number;
46
- /** The URL of the page. */
47
- url?: string;
48
- /** The template of the page. */
49
- template?: string | null | number;
50
- /** The content of the page. */
51
- content?: string;
52
- /** Additional properties. */
53
- [key: string]: unknown;
54
- }
32
+ // interface PageBody {
33
+ // /** The title of the page. */
34
+ // title?: string;
35
+ // /** The description of the page. */
36
+ // description?: string;
37
+ // /** The URL of the page's image. */
38
+ // image?: string;
39
+ // /** The ID of the page. */
40
+ // pageId?: number;
41
+ // /** The ID of the page's language. */
42
+ // languageId?: number;
43
+ // /** The ID of the page's site. */
44
+ // siteId?: number;
45
+ // /** The URL of the page. */
46
+ // url?: string;
47
+ // /** The template of the page. */
48
+ // template?: string | null | number;
49
+ // /** The content of the page. */
50
+ // content?: string;
51
+ // /** Additional properties. */
52
+ // [key: string]: unknown;
53
+ // }
55
54
 
56
55
  /** Describes an item in a sitemap. */
57
56
  interface SitemapItem {
@@ -120,10 +119,8 @@ export interface APIRequest {
120
119
  attempt?: number;
121
120
  /**
122
121
  * Headers for the post api fetch
123
- * @shame any
124
- * @todo type this correctly from axios types
125
122
  */
126
- headers?: any; // Record<string, unknown>;
123
+ headers?: Record<string, unknown>;
127
124
  /* Save results in apiCache folder */
128
125
  useApiCacheDir?: boolean;
129
126
  }
@@ -1,6 +1,6 @@
1
+ import type { Core, Fields } from "@griddo/core";
1
2
  import type { EndSiteRenderBody } from "./api";
2
3
  import type { Site } from "./sites";
3
- import type { Core, Fields } from "@griddo/core";
4
4
 
5
5
  interface Settings {
6
6
  apiVersion?: string;
@@ -70,9 +70,7 @@ interface RenderInfo {
70
70
  sitesToPublish: Array<Site>;
71
71
  }
72
72
 
73
- type LifeCycleSteps = Array<
74
- (...args: Array<unknown>) => unknown | Promise<unknown>
75
- >;
73
+ type LifeCycleAction = (...args: Array<unknown>) => void | Promise<void>;
76
74
 
77
75
  type LifeCyclesNames =
78
76
  | "Init"
@@ -82,12 +80,11 @@ type LifeCyclesNames =
82
80
  | "SSG"
83
81
  | "Relocation"
84
82
  | "Meta"
85
- | "Archive"
83
+ | "Sync"
86
84
  | "Clean"
87
85
  | "Close"
88
86
  | "HealthCheck"
89
- | "Close"
90
- | "__DEBUG__";
87
+ | "Close";
91
88
 
92
89
  type PlaceholderPath =
93
90
  | "__exports"
@@ -97,13 +94,12 @@ type PlaceholderPath =
97
94
  | "__components"
98
95
  | "__root"
99
96
  | "__exports_dist"
100
- | "__cx_dist";
97
+ | "__sites";
101
98
 
102
99
  interface CXConfig {
103
100
  proDomain: string;
104
101
  griddoVersion: string;
105
102
  buildReportFileName: string;
106
- paths: (domain?: string) => Record<PlaceholderPath, string>;
107
103
  }
108
104
 
109
105
  interface AIEmbeddingsResponse {
@@ -116,6 +112,7 @@ interface Artifacts {
116
112
  cacheables: Array<string>;
117
113
  initials: Array<string>;
118
114
  archivables: Array<string>;
115
+ restaurable: Array<string>;
119
116
  }
120
117
 
121
118
  export type {
@@ -134,5 +131,5 @@ export type {
134
131
  Robot,
135
132
  Robots,
136
133
  Settings,
137
- LifeCycleSteps,
134
+ LifeCycleAction,
138
135
  };
@@ -21,5 +21,5 @@ export type Footer = {
21
21
  setAsDefault: boolean;
22
22
  theme: null | string;
23
23
  title: string;
24
- type: "header";
24
+ type: "footer";
25
25
  };
@@ -1,7 +1,7 @@
1
+ import type { Core, Fields } from "@griddo/core";
1
2
  import type { SocialsResponse } from "./api";
2
3
  import type { Settings } from "./global";
3
4
  import type { Site } from "./sites";
4
- import type { Core, Fields } from "@griddo/core";
5
5
 
6
6
  // TODO: In @griddo/core the type Core.Page has header/footer as React-Types,
7
7
  // but API return `number | null`.
@@ -156,8 +156,7 @@ export interface Dimensions {
156
156
  dimensionsSelect?: Array<string>;
157
157
  }
158
158
 
159
- export interface GatsbyPageTemplateProps
160
- extends Omit<GriddoPageObject, "context"> {
159
+ export interface GatsbyPageTemplateProps extends Omit<GriddoPageObject, "context"> {
161
160
  pageContext: GriddoPageObject["context"] & {
162
161
  page: Core.Page;
163
162
  };
@@ -0,0 +1,59 @@
1
+ import type { RenderInfo } from "./global";
2
+
3
+ const RENDER_MODE = {
4
+ FROM_SCRATCH: "FROM_SCRATCH",
5
+ INCREMENTAL: "INCREMENTAL",
6
+ IDLE: "IDLE",
7
+ } as const;
8
+
9
+ type RenderMode = (typeof RENDER_MODE)[keyof typeof RENDER_MODE];
10
+
11
+ export interface RenderModeTuple {
12
+ renderMode: RenderMode;
13
+ reason?: string;
14
+ }
15
+
16
+ type DomainLike = string;
17
+
18
+ type RenderDB = {
19
+ proDomain: string;
20
+ griddoVersion: string;
21
+ buildReportFileName: string;
22
+ sortedDomains: Array<DomainLike>;
23
+ paths: {
24
+ root: string;
25
+ cx: string;
26
+ ssg: string;
27
+ cxCache: string;
28
+ components: string;
29
+ exportsDir: string;
30
+ };
31
+ domains: {
32
+ [key: DomainLike]: {
33
+ renderMode?: RenderMode;
34
+ shouldBeRendered?: boolean;
35
+ isRendering?: boolean;
36
+ renderInfo?: RenderInfo;
37
+ renderModeReason?: string;
38
+ };
39
+ };
40
+ };
41
+
42
+ interface Report {
43
+ authControl:
44
+ | {
45
+ Authorization: string;
46
+ "Cache-Control": string;
47
+ lang?: string | undefined;
48
+ }
49
+ | undefined;
50
+ sites: Array<{
51
+ siteId: number;
52
+ publishHashes: Array<string>;
53
+ siteHash: string | null;
54
+ unpublishHashes: Array<string>;
55
+ publishPagesIds: Array<number>;
56
+ }>;
57
+ }
58
+
59
+ export { RENDER_MODE, type RenderDB, type RenderMode, type Report };
@@ -1,6 +1,6 @@
1
+ import type { Core } from "@griddo/core";
1
2
  import type { SocialsResponse } from "./api";
2
3
  import type { Footer, Header } from "./navigation";
3
- import type { Core } from "@griddo/core";
4
4
 
5
5
  /**
6
6
  * Describes a Griddo site object from API.
@@ -43,7 +43,6 @@ export interface Site
43
43
  */
44
44
  pages: Array<number>;
45
45
  onlinePages: Array<number>;
46
- changedPages: Array<number>;
47
46
  published: string;
48
47
  rendering: boolean;
49
48
  renderingHours: number;