@griddo/cx 11.7.11 → 11.7.12-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 (302) 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 +14 -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 +22 -0
  11. package/build/adapters/gatsby/actions/init.js.map +1 -0
  12. package/build/adapters/gatsby/actions/logs.js +9 -0
  13. package/build/adapters/gatsby/actions/logs.js.map +1 -0
  14. package/build/adapters/gatsby/actions/meta.js +13 -0
  15. package/build/adapters/gatsby/actions/meta.js.map +1 -0
  16. package/build/adapters/gatsby/actions/prepare.js +9 -0
  17. package/build/adapters/gatsby/actions/prepare.js.map +1 -0
  18. package/build/adapters/gatsby/actions/relocation.js +15 -0
  19. package/build/adapters/gatsby/actions/relocation.js.map +1 -0
  20. package/build/adapters/gatsby/actions/restore.js +26 -0
  21. package/build/adapters/gatsby/actions/restore.js.map +1 -0
  22. package/build/adapters/gatsby/actions/ssg.js +9 -0
  23. package/build/adapters/gatsby/actions/ssg.js.map +1 -0
  24. package/build/adapters/gatsby/actions/sync.js +51 -0
  25. package/build/adapters/gatsby/actions/sync.js.map +1 -0
  26. package/build/adapters/gatsby/index.js +78 -0
  27. package/build/adapters/gatsby/index.js.map +1 -0
  28. package/build/adapters/gatsby/shared/artifacts.js +20 -0
  29. package/build/adapters/gatsby/shared/artifacts.js.map +1 -0
  30. package/build/adapters/gatsby/shared/context.js +31 -0
  31. package/build/adapters/gatsby/shared/context.js.map +1 -0
  32. package/build/adapters/gatsby/shared/diff-assets.js +101 -0
  33. package/build/adapters/gatsby/shared/diff-assets.js.map +1 -0
  34. package/build/adapters/gatsby/shared/extract-assets.js +58 -0
  35. package/build/adapters/gatsby/shared/extract-assets.js.map +1 -0
  36. package/build/adapters/gatsby/shared/gatsby-build.js +55 -0
  37. package/build/adapters/gatsby/shared/gatsby-build.js.map +1 -0
  38. package/build/adapters/gatsby/shared/sync-render.js +210 -0
  39. package/build/adapters/gatsby/shared/sync-render.js.map +1 -0
  40. package/build/adapters/gatsby/shared/types.js +3 -0
  41. package/build/adapters/gatsby/shared/types.js.map +1 -0
  42. package/build/commands/end-render.js +87 -0
  43. package/build/commands/end-render.js.map +1 -0
  44. package/build/commands/prepare-assets-directory.js +30 -0
  45. package/build/commands/prepare-assets-directory.js.map +1 -0
  46. package/build/commands/prepare-domains-render.js +133 -0
  47. package/build/commands/prepare-domains-render.js.map +1 -0
  48. package/build/commands/reset-render.js +21 -0
  49. package/build/commands/reset-render.js.map +1 -0
  50. package/build/commands/start-render.js +44 -0
  51. package/build/commands/start-render.js.map +1 -0
  52. package/build/commands/upload-search-content.js +180 -0
  53. package/build/commands/upload-search-content.js.map +1 -0
  54. package/build/constants/endpoints.js +43 -0
  55. package/build/constants/endpoints.js.map +1 -0
  56. package/build/constants/envs.js +68 -0
  57. package/build/constants/envs.js.map +1 -0
  58. package/build/constants/errors.js +81 -0
  59. package/build/constants/errors.js.map +1 -0
  60. package/build/services/auth.js +40 -0
  61. package/build/services/auth.js.map +1 -0
  62. package/build/services/db-class.js +49 -0
  63. package/build/services/db-class.js.map +1 -0
  64. package/build/services/db.js +34 -0
  65. package/build/services/db.js.map +1 -0
  66. package/build/services/navigation.js +96 -0
  67. package/build/services/navigation.js.map +1 -0
  68. package/build/services/reference-fields.js +131 -0
  69. package/build/services/reference-fields.js.map +1 -0
  70. package/build/services/robots.js +60 -0
  71. package/build/services/robots.js.map +1 -0
  72. package/build/services/sites.js +110 -0
  73. package/build/services/sites.js.map +1 -0
  74. package/build/services/store.js +257 -0
  75. package/build/services/store.js.map +1 -0
  76. package/build/types/api.js +3 -0
  77. package/build/types/api.js.map +1 -0
  78. package/build/types/global.js +3 -0
  79. package/build/types/global.js.map +1 -0
  80. package/build/types/navigation.js +3 -0
  81. package/build/types/navigation.js.map +1 -0
  82. package/build/types/pages.js +3 -0
  83. package/build/types/pages.js.map +1 -0
  84. package/build/types/render.js +10 -0
  85. package/build/types/render.js.map +1 -0
  86. package/build/types/sites.js +3 -0
  87. package/build/types/sites.js.map +1 -0
  88. package/build/types/templates.js +3 -0
  89. package/build/types/templates.js.map +1 -0
  90. package/build/utils/api.js +165 -0
  91. package/build/utils/api.js.map +1 -0
  92. package/build/utils/artifacts.js +38 -0
  93. package/build/utils/artifacts.js.map +1 -0
  94. package/build/utils/brush.js +30 -0
  95. package/build/utils/brush.js.map +1 -0
  96. package/build/utils/cache.js +106 -0
  97. package/build/utils/cache.js.map +1 -0
  98. package/build/utils/check-environment-health.js +69 -0
  99. package/build/utils/check-environment-health.js.map +1 -0
  100. package/build/utils/core-utils.js +270 -0
  101. package/build/utils/core-utils.js.map +1 -0
  102. package/build/utils/domains.js +37 -0
  103. package/build/utils/domains.js.map +1 -0
  104. package/build/utils/errors.js +30 -0
  105. package/build/utils/errors.js.map +1 -0
  106. package/build/utils/folders.js +341 -0
  107. package/build/utils/folders.js.map +1 -0
  108. package/build/utils/images.js +45 -0
  109. package/build/utils/images.js.map +1 -0
  110. package/build/utils/instance.js +66 -0
  111. package/build/utils/instance.js.map +1 -0
  112. package/build/utils/loggin.js +119 -0
  113. package/build/utils/loggin.js.map +1 -0
  114. package/build/utils/npm-deps/find-up-simple.js +75 -0
  115. package/build/utils/npm-deps/find-up-simple.js.map +1 -0
  116. package/build/utils/npm-deps/pkg-dir.js +20 -0
  117. package/build/utils/npm-deps/pkg-dir.js.map +1 -0
  118. package/build/utils/npm-deps/xml-parser.js +49 -0
  119. package/build/utils/npm-deps/xml-parser.js.map +1 -0
  120. package/build/utils/pages.js +359 -0
  121. package/build/utils/pages.js.map +1 -0
  122. package/build/utils/render.js +168 -0
  123. package/build/utils/render.js.map +1 -0
  124. package/build/utils/sitemaps.js +110 -0
  125. package/build/utils/sitemaps.js.map +1 -0
  126. package/build/utils/sites.js +105 -0
  127. package/build/utils/sites.js.map +1 -0
  128. package/build/utils/store.js +193 -0
  129. package/build/utils/store.js.map +1 -0
  130. package/exporter/adapters/gatsby/actions/clean.ts +14 -0
  131. package/exporter/adapters/gatsby/actions/close.ts +20 -0
  132. package/exporter/adapters/gatsby/actions/data.ts +25 -0
  133. package/exporter/adapters/gatsby/actions/healthCheck.ts +10 -0
  134. package/exporter/adapters/gatsby/actions/init.ts +26 -0
  135. package/exporter/adapters/gatsby/actions/logs.ts +10 -0
  136. package/exporter/adapters/gatsby/actions/meta.ts +16 -0
  137. package/exporter/adapters/gatsby/actions/prepare.ts +9 -0
  138. package/exporter/adapters/gatsby/actions/relocation.ts +15 -0
  139. package/exporter/adapters/gatsby/actions/restore.ts +36 -0
  140. package/exporter/adapters/gatsby/actions/ssg.ts +12 -0
  141. package/exporter/adapters/gatsby/actions/sync.ts +71 -0
  142. package/exporter/adapters/gatsby/index.ts +73 -153
  143. package/exporter/adapters/gatsby/shared/artifacts.ts +16 -0
  144. package/exporter/adapters/gatsby/shared/context.ts +50 -0
  145. package/exporter/adapters/gatsby/shared/diff-assets.ts +113 -0
  146. package/exporter/adapters/gatsby/shared/extract-assets.ts +61 -0
  147. package/exporter/adapters/gatsby/shared/gatsby-build.ts +58 -0
  148. package/exporter/adapters/gatsby/shared/sync-render.ts +276 -0
  149. package/exporter/adapters/gatsby/shared/types.ts +35 -0
  150. package/exporter/build-esbuild.noop +42 -0
  151. package/exporter/build.sh +4 -38
  152. package/exporter/commands/end-render.ts +72 -70
  153. package/exporter/commands/prepare-assets-directory.ts +30 -0
  154. package/exporter/commands/prepare-domains-render.ts +143 -31
  155. package/exporter/commands/reset-render.ts +10 -3
  156. package/exporter/commands/start-render.ts +22 -45
  157. package/exporter/commands/upload-search-content.ts +194 -21
  158. package/exporter/constants/endpoints.ts +2 -1
  159. package/exporter/constants/envs.ts +57 -55
  160. package/exporter/{errors/errors-data.ts → constants/errors.ts} +24 -14
  161. package/exporter/services/auth.ts +7 -6
  162. package/exporter/services/db-class.ts +54 -0
  163. package/exporter/services/db.ts +32 -0
  164. package/exporter/services/navigation.ts +4 -10
  165. package/exporter/services/reference-fields.ts +9 -24
  166. package/exporter/services/robots.ts +9 -16
  167. package/exporter/services/sites.ts +36 -24
  168. package/exporter/services/store.ts +107 -96
  169. package/exporter/types/api.ts +27 -28
  170. package/exporter/types/global.ts +8 -11
  171. package/exporter/types/navigation.ts +1 -1
  172. package/exporter/types/pages.ts +2 -3
  173. package/exporter/types/render.ts +59 -0
  174. package/exporter/types/sites.ts +1 -2
  175. package/exporter/utils/api.ts +55 -75
  176. package/exporter/utils/artifacts.ts +38 -0
  177. package/exporter/utils/brush.ts +34 -0
  178. package/exporter/utils/cache.ts +37 -62
  179. package/exporter/utils/check-environment-health.ts +80 -0
  180. package/exporter/utils/core-utils.ts +133 -272
  181. package/exporter/utils/domains.ts +10 -7
  182. package/exporter/{errors/index.ts → utils/errors.ts} +10 -9
  183. package/exporter/utils/folders.ts +163 -98
  184. package/exporter/utils/images.ts +1 -6
  185. package/exporter/utils/instance.ts +9 -13
  186. package/exporter/utils/loggin.ts +44 -91
  187. package/exporter/utils/npm-deps/find-up-simple.ts +100 -0
  188. package/exporter/utils/npm-deps/pkg-dir.ts +17 -0
  189. package/exporter/utils/npm-deps/xml-parser.ts +57 -0
  190. package/exporter/utils/pages.ts +23 -88
  191. package/exporter/utils/render.ts +180 -48
  192. package/exporter/utils/sitemaps.ts +129 -0
  193. package/exporter/utils/sites.ts +19 -197
  194. package/exporter/utils/store.ts +87 -180
  195. package/gatsby-browser.tsx +41 -58
  196. package/gatsby-config.ts +10 -17
  197. package/gatsby-node.ts +17 -78
  198. package/gatsby-ssr.tsx +2 -1
  199. package/package.json +35 -86
  200. package/plugins/gatsby-plugin-svgr-loader/gatsby-node.js +55 -0
  201. package/plugins/gatsby-plugin-svgr-loader/package.json +8 -0
  202. package/react/DynamicScript/index.tsx +33 -0
  203. package/{exporter/react → react}/Favicon/index.tsx +1 -7
  204. package/{exporter/react → react}/GriddoIntegrations/index.tsx +16 -22
  205. package/{exporter/react → react}/GriddoIntegrations/utils.ts +21 -9
  206. package/{build/react/index.d.ts → react/index.tsx} +1 -0
  207. package/src/components/Head.tsx +13 -46
  208. package/src/components/template.tsx +8 -30
  209. package/src/gatsby-node-utils.ts +73 -2
  210. package/src/html.tsx +2 -11
  211. package/src/types.ts +5 -5
  212. package/tsconfig.commands.json +36 -0
  213. package/tsconfig.exporter.json +19 -0
  214. package/tsconfig.json +5 -3
  215. package/build/adapters/gatsby/index.d.ts +0 -4
  216. package/build/adapters/gatsby/utils.d.ts +0 -22
  217. package/build/artifacts/index.d.ts +0 -6
  218. package/build/commands/end-render.d.ts +0 -2
  219. package/build/commands/move-assets.d.ts +0 -1
  220. package/build/commands/prepare-domains-render.d.ts +0 -1
  221. package/build/commands/reset-render.d.ts +0 -2
  222. package/build/commands/start-render.d.ts +0 -2
  223. package/build/commands/upload-search-content.d.ts +0 -2
  224. package/build/constants/endpoints.d.ts +0 -19
  225. package/build/constants/envs.d.ts +0 -37
  226. package/build/constants/index.d.ts +0 -57
  227. package/build/end-render.js +0 -74
  228. package/build/end-render.js.map +0 -7
  229. package/build/errors/errors-data.d.ts +0 -22
  230. package/build/errors/index.d.ts +0 -15
  231. package/build/index.d.ts +0 -29
  232. package/build/index.js +0 -73
  233. package/build/index.js.map +0 -7
  234. package/build/prepare-domains-render.js +0 -73
  235. package/build/prepare-domains-render.js.map +0 -7
  236. package/build/react/Favicon/index.d.ts +0 -5
  237. package/build/react/Favicon/utils.d.ts +0 -9
  238. package/build/react/GriddoIntegrations/index.d.ts +0 -20
  239. package/build/react/GriddoIntegrations/utils.d.ts +0 -26
  240. package/build/react/index.js +0 -3
  241. package/build/registers/api.d.ts +0 -9
  242. package/build/registers/gatsby.d.ts +0 -9
  243. package/build/registers/index.d.ts +0 -3
  244. package/build/reset-render.js +0 -74
  245. package/build/reset-render.js.map +0 -7
  246. package/build/services/auth.d.ts +0 -10
  247. package/build/services/domains.d.ts +0 -6
  248. package/build/services/navigation.d.ts +0 -50
  249. package/build/services/reference-fields.d.ts +0 -20
  250. package/build/services/register.d.ts +0 -36
  251. package/build/services/robots.d.ts +0 -19
  252. package/build/services/settings.d.ts +0 -4
  253. package/build/services/sites.d.ts +0 -29
  254. package/build/services/store.d.ts +0 -6
  255. package/build/start-render.js +0 -100
  256. package/build/start-render.js.map +0 -7
  257. package/build/types/api.d.ts +0 -142
  258. package/build/types/global.d.ts +0 -84
  259. package/build/types/navigation.d.ts +0 -28
  260. package/build/types/pages.d.ts +0 -144
  261. package/build/types/sites.d.ts +0 -57
  262. package/build/types/templates.d.ts +0 -8
  263. package/build/upload-search-content.js +0 -74
  264. package/build/upload-search-content.js.map +0 -7
  265. package/build/utils/alerts.d.ts +0 -3
  266. package/build/utils/api.d.ts +0 -23
  267. package/build/utils/cache.d.ts +0 -35
  268. package/build/utils/core-utils.d.ts +0 -107
  269. package/build/utils/create-build-data.d.ts +0 -8
  270. package/build/utils/domains.d.ts +0 -13
  271. package/build/utils/folders.d.ts +0 -53
  272. package/build/utils/health-checks.d.ts +0 -7
  273. package/build/utils/images.d.ts +0 -16
  274. package/build/utils/instance.d.ts +0 -21
  275. package/build/utils/loggin.d.ts +0 -51
  276. package/build/utils/pages.d.ts +0 -34
  277. package/build/utils/render.d.ts +0 -13
  278. package/build/utils/searches.d.ts +0 -15
  279. package/build/utils/sites.d.ts +0 -31
  280. package/build/utils/store.d.ts +0 -81
  281. package/cx.config.d.ts +0 -5
  282. package/cx.config.js +0 -36
  283. package/exporter/adapters/gatsby/utils.ts +0 -161
  284. package/exporter/artifacts/README.md +0 -34
  285. package/exporter/artifacts/index.ts +0 -33
  286. package/exporter/commands/move-assets.ts +0 -11
  287. package/exporter/constants/index.ts +0 -129
  288. package/exporter/index.ts +0 -82
  289. package/exporter/react/index.tsx +0 -11
  290. package/exporter/registers/api.ts +0 -14
  291. package/exporter/registers/gatsby.ts +0 -14
  292. package/exporter/registers/index.ts +0 -4
  293. package/exporter/services/domains.ts +0 -16
  294. package/exporter/services/register.ts +0 -113
  295. package/exporter/services/settings.ts +0 -17
  296. package/exporter/utils/alerts.ts +0 -29
  297. package/exporter/utils/create-build-data.ts +0 -17
  298. package/exporter/utils/health-checks.ts +0 -64
  299. package/exporter/utils/searches.ts +0 -156
  300. package/src/README.md +0 -7
  301. package/start-render.js +0 -7
  302. /package/{exporter/react → react}/Favicon/utils.ts +0 -0
@@ -0,0 +1,168 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.assertRenderIsValid = assertRenderIsValid;
7
+ exports.generateBuildReport = generateBuildReport;
8
+ exports.getRenderMetadataFromDB = getRenderMetadataFromDB;
9
+ exports.getRenderMode = getRenderMode;
10
+ exports.getRenderPathsFromDB = getRenderPathsFromDB;
11
+ exports.markRenderAsCompleted = markRenderAsCompleted;
12
+ exports.markRenderAsStarted = markRenderAsStarted;
13
+ exports.resolveDomainRenderMode = resolveDomainRenderMode;
14
+ exports.updateCommitFile = updateCommitFile;
15
+ const node_child_process_1 = require("node:child_process");
16
+ const promises_1 = __importDefault(require("node:fs/promises"));
17
+ const node_path_1 = __importDefault(require("node:path"));
18
+ const errors_1 = require("../constants/errors");
19
+ const auth_1 = require("../services/auth");
20
+ const db_1 = require("../services/db");
21
+ const render_1 = require("../types/render");
22
+ const errors_2 = require("./errors");
23
+ const folders_1 = require("./folders");
24
+ const loggin_1 = require("./loggin");
25
+ const store_1 = require("./store");
26
+ /**
27
+ * Creates a sentinel file with the current date and time.
28
+ * This file is used to track later if node_modules/@griddo/cx was cleaned by a
29
+ * npm install coming from a deploy.
30
+ */
31
+ async function markRenderAsStarted(options) {
32
+ const { domain } = options;
33
+ const db = await (0, db_1.readDB)();
34
+ db.domains[domain].isRendering = true;
35
+ await (0, db_1.writeDB)(db);
36
+ // Creamos un archivo centinela, si al terminar el render este archivo no
37
+ // existe es que ha habido un deploy por medio y hay que invalidar el render
38
+ const { __ssg } = await getRenderPathsFromDB();
39
+ const renderSentinelFile = node_path_1.default.join(__ssg, `.render-sentinel-${domain}`);
40
+ await promises_1.default.writeFile(renderSentinelFile, new Date().toISOString());
41
+ }
42
+ async function markRenderAsCompleted(domain) {
43
+ const db = await (0, db_1.readDB)();
44
+ db.domains[domain].isRendering = false;
45
+ // db.domains[domain].renderMode = undefined;
46
+ // db.domains[domain].shouldBeRendered = false;
47
+ await (0, db_1.writeDB)(db);
48
+ // Borramos finalmente el archivo centinela
49
+ const { __ssg } = await getRenderPathsFromDB();
50
+ const renderSentinelFile = node_path_1.default.join(__ssg, `.render-sentinel-${domain}`);
51
+ await promises_1.default.unlink(renderSentinelFile);
52
+ }
53
+ async function assertRenderIsValid(domain) {
54
+ // Comprobamos que .render-sentinel exista, si no es que un deploy lo borro
55
+ // y hay que invalidar el render.
56
+ const { __ssg } = await getRenderPathsFromDB();
57
+ const renderSentinelFile = node_path_1.default.join(__ssg, `.render-sentinel-${domain}`);
58
+ if (!(await (0, folders_1.pathExists)(renderSentinelFile))) {
59
+ (0, errors_2.throwError)(errors_1.RenderUUIDError);
60
+ }
61
+ }
62
+ // @todo add more messages...
63
+ async function resolveDomainRenderMode(options) {
64
+ const { domain, shouldBeRendered } = options;
65
+ const { __cache, __exports } = await getRenderPathsFromDB({ domain });
66
+ // missing exports
67
+ const missingExports = !(await (0, folders_1.pathExists)(node_path_1.default.join(__exports)));
68
+ // render with errors
69
+ const db = await (0, db_1.readDB)();
70
+ const wasRenderWithError = db.domains[domain]?.isRendering;
71
+ // new deploy or machine
72
+ const isNewDeploy = await hasNewCommit(__cache);
73
+ if (missingExports) {
74
+ (0, loggin_1.infoLog)(`[${domain}]: Render from Scratch due to missing exports (first render)`);
75
+ return {
76
+ renderMode: render_1.RENDER_MODE.FROM_SCRATCH,
77
+ reason: "Missing exports directory",
78
+ };
79
+ }
80
+ if (wasRenderWithError) {
81
+ (0, loggin_1.infoLog)(`[${domain}]: Render from Scratch due to a previous render error`);
82
+ return {
83
+ renderMode: render_1.RENDER_MODE.FROM_SCRATCH,
84
+ reason: "error in previous render",
85
+ };
86
+ }
87
+ if (isNewDeploy) {
88
+ (0, loggin_1.infoLog)(`[${domain}]: Render from Scratch due to a changes in the repo (commit hash)`);
89
+ return { renderMode: render_1.RENDER_MODE.FROM_SCRATCH, reason: "new commit hash" };
90
+ }
91
+ if (!shouldBeRendered) {
92
+ (0, loggin_1.infoLog)(`[${domain}]: Skipping render as it is not marked for rendering (IDLE).`);
93
+ return { renderMode: render_1.RENDER_MODE.IDLE, reason: "" };
94
+ }
95
+ console.log(`[${domain}]: {DEBUG} Render INCREMENTAL porque no se cumplen: missingExports (FROM_SCRATCH), wasRenderWithError (FROM_SCRATCH), isNewDeploy (FROM_SCRATCH) o !shouldBeRendered (IDLE)`);
96
+ return { renderMode: render_1.RENDER_MODE.INCREMENTAL, reason: "" };
97
+ }
98
+ async function hasNewCommit(basePath) {
99
+ const commitFile = node_path_1.default.join(basePath, "commit");
100
+ const currentCommit = (0, node_child_process_1.execSync)("git rev-parse HEAD").toString().trim();
101
+ if (await (0, folders_1.pathExists)(commitFile)) {
102
+ const savedCommit = (await promises_1.default.readFile(commitFile, "utf-8")).trim();
103
+ if (savedCommit === currentCommit) {
104
+ return false; // No hay nuevo commit
105
+ }
106
+ return true;
107
+ }
108
+ return true;
109
+ }
110
+ async function updateCommitFile(options) {
111
+ const { basePath } = options;
112
+ const currentCommit = (0, node_child_process_1.execSync)("git rev-parse HEAD").toString().trim();
113
+ await promises_1.default.writeFile(node_path_1.default.join(basePath, "commit"), currentCommit);
114
+ }
115
+ async function getRenderMode(domain) {
116
+ const db = await (0, db_1.readDB)();
117
+ if (!db.domains[domain].renderMode) {
118
+ throw new Error(`Render mode not found for domain ${domain}`);
119
+ }
120
+ return {
121
+ renderMode: db.domains[domain].renderMode,
122
+ reason: db.domains[domain].renderModeReason,
123
+ };
124
+ }
125
+ async function getRenderPathsFromDB(options) {
126
+ const { domain, dbFilePath } = options || {};
127
+ const db = await (0, db_1.readDB)(dbFilePath);
128
+ const paths = db.paths;
129
+ return {
130
+ __root: paths.root,
131
+ __cache: node_path_1.default.join(paths.cxCache, domain || ""),
132
+ __components: paths.components,
133
+ __cx: paths.cx,
134
+ __sites: paths.exportsDir,
135
+ __exports: node_path_1.default.join(paths.exportsDir, domain || ""),
136
+ __ssg: paths.ssg,
137
+ __exports_dist: node_path_1.default.join(paths.exportsDir, domain || "", "dist"),
138
+ };
139
+ }
140
+ async function getRenderMetadataFromDB() {
141
+ const db = await (0, db_1.readDB)();
142
+ return {
143
+ proDomainPrefix: db.proDomainPrefix,
144
+ griddoVersion: db.griddoVersion,
145
+ buildReportFileName: db.buildReportFileName,
146
+ };
147
+ }
148
+ /**
149
+ * Save a file with the end of build process to use as `build-end` signal.
150
+ */
151
+ async function generateBuildReport(domain) {
152
+ const authControl = await auth_1.AuthService.login();
153
+ const { __root } = await getRenderPathsFromDB();
154
+ const { buildReportFileName } = await getRenderMetadataFromDB();
155
+ const { buildProcessData } = await (0, store_1.getBuildMetadata)(domain);
156
+ const buildSitesInfo = Object.keys(buildProcessData).map((siteID) => ({
157
+ ...buildProcessData[siteID],
158
+ siteId: Number.parseInt(siteID),
159
+ }));
160
+ const report = {
161
+ authControl,
162
+ sites: buildSitesInfo,
163
+ };
164
+ const reportFilePath = node_path_1.default.join(__root, "dist", buildReportFileName);
165
+ await promises_1.default.writeFile(reportFilePath, JSON.stringify(report));
166
+ (0, loggin_1.verboseLog)(`build report saved in ${reportFilePath}`);
167
+ }
168
+ //# sourceMappingURL=render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../exporter/utils/render.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.generateSitemaps = generateSitemaps;
7
+ const promises_1 = __importDefault(require("node:fs/promises"));
8
+ const node_path_1 = __importDefault(require("node:path"));
9
+ const auth_1 = require("../services/auth");
10
+ const sites_1 = require("../services/sites");
11
+ const folders_1 = require("./folders");
12
+ const loggin_1 = require("./loggin");
13
+ const xml_parser_1 = require("./npm-deps/xml-parser");
14
+ const render_1 = require("./render");
15
+ const store_1 = require("./store");
16
+ /**
17
+ * Generate sitemaps and save them into file system.
18
+ */
19
+ async function generateSitemaps(domain) {
20
+ const { __root } = await (0, render_1.getRenderPathsFromDB)();
21
+ const { sitesToPublish } = await (0, store_1.getBuildMetadata)(domain);
22
+ const distDir = node_path_1.default.join(__root, "dist");
23
+ const templateSitemapPrefix = "sitemap-";
24
+ const isGriddoSitemapFile = (file) => file === "sitemap.xml" || (file.startsWith(templateSitemapPrefix) && file.endsWith(".xml"));
25
+ for (const site of sitesToPublish) {
26
+ const { id, languages } = site;
27
+ for (const lang of languages) {
28
+ // Local copy of headers to avoid mutating the shared object
29
+ const localHeaders = auth_1.AuthService.headers
30
+ ? { ...auth_1.AuthService.headers }
31
+ : {};
32
+ localHeaders.lang = lang.id.toString();
33
+ const response = await (0, sites_1.getSitemap)({ siteId: id, headers: localHeaders });
34
+ if (!response) {
35
+ continue;
36
+ }
37
+ const { items: sitemapPagesGroup, url } = response;
38
+ const { home, domain } = url;
39
+ if (!home) {
40
+ continue;
41
+ }
42
+ const domainLanguage = site.domains.find((domain) => Object.keys(domain)[0] === lang.id.toString());
43
+ if (!domainLanguage) {
44
+ continue;
45
+ }
46
+ const slug = Object.values(domainLanguage)[0];
47
+ const sitemaps = [];
48
+ const sitemapPageGroupKeys = Object.keys(sitemapPagesGroup);
49
+ const sitemapBasePath = node_path_1.default.join(distDir, slug.replace(domain, ""));
50
+ /** delete every griddo sitemap file before create the new ones */
51
+ if (await (0, folders_1.pathExists)(sitemapBasePath)) {
52
+ try {
53
+ const files = await promises_1.default.readdir(sitemapBasePath);
54
+ for (const file of files) {
55
+ if (isGriddoSitemapFile(file)) {
56
+ const filePath = node_path_1.default.join(sitemapBasePath, file);
57
+ try {
58
+ await promises_1.default.rm(filePath);
59
+ }
60
+ catch (err) {
61
+ console.error(`Error deleting file ${filePath}:`, err);
62
+ }
63
+ }
64
+ }
65
+ }
66
+ catch (err) {
67
+ console.error(`Error reading ${sitemapBasePath}:`, err);
68
+ }
69
+ }
70
+ for (const templateId of sitemapPageGroupKeys) {
71
+ const sitemapPages = sitemapPagesGroup[templateId];
72
+ if (!sitemapPages.length) {
73
+ continue;
74
+ }
75
+ const siteMap = (0, xml_parser_1.generateUrlsetXml)(sitemapPages);
76
+ const sitemapName = `/${templateSitemapPrefix}${templateId.toLowerCase()}.xml`;
77
+ const exactPath = node_path_1.default.join(sitemapBasePath, sitemapName);
78
+ await saveFile(exactPath, siteMap);
79
+ sitemaps.push(`${home.endsWith("/") ? home.slice(0, -1) : home}${sitemapName}`);
80
+ }
81
+ if (!sitemaps.length) {
82
+ continue;
83
+ }
84
+ const siteMap = (0, xml_parser_1.generateSitemapIndexXml)(sitemaps);
85
+ const exactPath = node_path_1.default.join(sitemapBasePath, "sitemap.xml");
86
+ await saveFile(exactPath, siteMap);
87
+ (0, loggin_1.verboseLog)(`sitemap generated in ${exactPath}`);
88
+ }
89
+ }
90
+ }
91
+ /**
92
+ * Saves the content to a file specified by its path. If the file exists, it will be overwritten.
93
+ *
94
+ * @param filePath The path of the file to save the content to.
95
+ * @param content The content to save to the file.
96
+ */
97
+ async function saveFile(filePath, content) {
98
+ try {
99
+ const pathName = node_path_1.default.dirname(filePath);
100
+ if (!(await (0, folders_1.pathExists)(pathName))) {
101
+ await promises_1.default.mkdir(pathName, { recursive: true });
102
+ }
103
+ await promises_1.default.writeFile(filePath, content);
104
+ }
105
+ catch (error) {
106
+ console.log(error);
107
+ throw new Error(`Error saving a file`);
108
+ }
109
+ }
110
+ //# sourceMappingURL=sitemaps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sitemaps.js","sourceRoot":"","sources":["../../exporter/utils/sitemaps.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getSiteData = getSiteData;
7
+ exports.getSitesToRender = getSitesToRender;
8
+ exports.unpublishSites = unpublishSites;
9
+ const promises_1 = __importDefault(require("node:fs/promises"));
10
+ const node_path_1 = __importDefault(require("node:path"));
11
+ const envs_1 = require("../constants/envs");
12
+ const sites_1 = require("../services/sites");
13
+ const render_1 = require("./render");
14
+ /**
15
+ * Check the instance sites and returns site prepared to be published and unpublished.
16
+ */
17
+ async function getSitesToRender(domain) {
18
+ // Get all sites. An array of Site
19
+ const allSites = await (0, sites_1.getAllSites)(domain);
20
+ // Filter the array of sites to get only the ones to build/render
21
+ const validSites = envs_1.GRIDDO_RENDER_ALL_SITES
22
+ ? allSites.filter((site) => !envs_1.GRIDDO_RENDER_SITE || site.id === envs_1.GRIDDO_RENDER_SITE)
23
+ : allSites.filter((site) => envs_1.GRIDDO_RENDER_SITE ? site.id === envs_1.GRIDDO_RENDER_SITE : !!site.shouldBeUpdated);
24
+ // If there are valid sites...
25
+ // En este paso se añade al objeto `Site` la información de los dominios
26
+ // utilizando los idiomas.
27
+ if (validSites.length) {
28
+ for (const site of validSites) {
29
+ const { items } = await (0, sites_1.getSiteLanguages)(site.id);
30
+ // Añadimos la prop domains con el dominio "cocinado" con los
31
+ // idiomas y teniendo en cuenta solo el dominio actual.
32
+ site.domains = items
33
+ .filter((item) => item.domain && (item.domain.slug === domain || item.domain.slug === `/${domain}`))
34
+ .map((item) => ({ [item.id]: `${item.domain.slug}${item.path}` }));
35
+ }
36
+ }
37
+ // Save sites object to publish
38
+ const sitesToPublish = validSites.filter((site) => envs_1.GRIDDO_RENDER_SITE ? site.id === envs_1.GRIDDO_RENDER_SITE : !!site.isPublished);
39
+ // Save sites object to unpublish
40
+ const sitesToUnpublish = validSites.filter((site) => !site.isPublished && site.shouldBeUpdated);
41
+ return {
42
+ sitesToPublish,
43
+ sitesToUnpublish,
44
+ };
45
+ }
46
+ /**
47
+ * Unpublish an array of sites sending the information to the API.
48
+ *
49
+ * @param sites An array of sites
50
+ * @see https://griddoio.notion.site/Sites-d7bb0b7cb8d24894a5337e1139fc3d09#2019d3255bda4d219c7e19cf28d0c4fe
51
+ */
52
+ async function unpublishSites(sites) {
53
+ const { __root } = await (0, render_1.getRenderPathsFromDB)();
54
+ for (const site of sites) {
55
+ // API
56
+ const buildInfo = await (0, sites_1.startSiteRender)(site.id);
57
+ const { siteHash } = buildInfo;
58
+ const body = {
59
+ siteHash,
60
+ publishHashes: [],
61
+ unpublishHashes: [],
62
+ publishPagesIds: [],
63
+ };
64
+ await (0, sites_1.endSiteRender)(site.id, body);
65
+ // STORE
66
+ // Remove site directory from the Store
67
+ // @todo: quitar. Como ya no hay persistenci de store, esto debería eliminarse de forma segura.
68
+ await promises_1.default.rm(node_path_1.default.join(__root, "store", site.id.toString()), {
69
+ force: true,
70
+ recursive: true,
71
+ });
72
+ }
73
+ }
74
+ /**
75
+ * Return a single site generic data.
76
+ *
77
+ * @param siteID The site id.
78
+ * @see SiteData
79
+ */
80
+ async function getSiteData(siteID) {
81
+ const buildData = await (0, sites_1.startSiteRender)(siteID);
82
+ const siteInfo = await (0, sites_1.getSiteInfo)(siteID);
83
+ const siteLangs = await (0, sites_1.getSiteLanguages)(siteID);
84
+ const socials = await (0, sites_1.getSiteSocials)(siteID);
85
+ const siteLangsInfo = siteLangs.items;
86
+ const defaultLang = siteLangsInfo.find((lang) => lang.isDefault);
87
+ const { siteHash, unpublishHashes, publishIds } = buildData;
88
+ const { headers, footers } = siteInfo;
89
+ const validPagesIds = envs_1.GRIDDO_RENDER_PAGES.length
90
+ ? envs_1.GRIDDO_RENDER_PAGES.filter((item) => publishIds.includes(item))
91
+ : publishIds;
92
+ const siteData = {
93
+ siteInfo,
94
+ validPagesIds,
95
+ siteHash,
96
+ unpublishHashes,
97
+ siteLangs: siteLangsInfo,
98
+ defaultLang,
99
+ headers,
100
+ footers,
101
+ socials,
102
+ };
103
+ return siteData;
104
+ }
105
+ //# sourceMappingURL=sites.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sites.js","sourceRoot":"","sources":["../../exporter/utils/sites.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,193 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getBuildMetadata = getBuildMetadata;
7
+ exports.getPageInStoreDir = getPageInStoreDir;
8
+ exports.getZombiePagesInStore = getZombiePagesInStore;
9
+ exports.removeOrphanSites = removeOrphanSites;
10
+ exports.removeSitePagesFromStore = removeSitePagesFromStore;
11
+ exports.saveRenderInfoInStore = saveRenderInfoInStore;
12
+ exports.saveSitePagesInStore = saveSitePagesInStore;
13
+ exports.writeUniqueFileSync = writeUniqueFileSync;
14
+ const promises_1 = __importDefault(require("node:fs/promises"));
15
+ const node_path_1 = __importDefault(require("node:path"));
16
+ const errors_1 = require("../constants/errors");
17
+ const db_1 = require("../services/db");
18
+ const core_utils_1 = require("./core-utils");
19
+ const errors_2 = require("./errors");
20
+ const folders_1 = require("./folders");
21
+ const loggin_1 = require("./loggin");
22
+ const render_1 = require("./render");
23
+ /**
24
+ * Get the build metadata from the Store.
25
+ */
26
+ async function getBuildMetadata(domain) {
27
+ const db = await (0, db_1.readDB)();
28
+ const { sitesToPublish, createdPages, buildProcessData } = db.domains[domain].renderInfo || {};
29
+ if (!sitesToPublish || !createdPages || !buildProcessData) {
30
+ throw new Error("Build metadata not found");
31
+ }
32
+ return {
33
+ buildProcessData,
34
+ createdPages,
35
+ sitesToPublish,
36
+ };
37
+ }
38
+ /**
39
+ * Write render info into a file.
40
+ * @param renderInfo - Data that will be saved related to the render process.
41
+ */
42
+ async function saveRenderInfoInStore(renderInfo, domain) {
43
+ const db = await (0, db_1.readDB)();
44
+ db.domains[domain] = db.domains[domain] || {};
45
+ db.domains[domain].renderInfo = renderInfo;
46
+ await (0, db_1.writeDB)(db);
47
+ }
48
+ /**
49
+ * Return an array of ids only from `.json` files (no dirs) in the `basePath` dir based in the file name and filtered by the pages ids in a concrete site.
50
+ * @param basePath - Absolute path of the dir from which files will be read.
51
+ * @returns A Array<number> of pages ids in `basePath` dir filtered by pages ids in a concrete site.
52
+ */
53
+ // function getPagesInStoreDirBySitePages(
54
+ // basePath: string,
55
+ // pages: Array<number>,
56
+ // ): Array<number> {
57
+ // const allPagesInStore = getPageInStoreDir(basePath);
58
+ // const pagesBySite = allPagesInStore.filter((page) => pages.includes(page));
59
+ // return pagesBySite;
60
+ // }
61
+ /**
62
+ * Return an array of paths only from `.json` files (no dirs) in the `basePath` dir based in the file name.
63
+ * @param basePath - Absolute path of the dir from which files will be read.
64
+ * @returns A Array<number> of pages ids in `basePath` dir.
65
+ */
66
+ async function getPageInStoreDir(basePath) {
67
+ const filesInStore = await promises_1.default.readdir(basePath);
68
+ return filesInStore
69
+ .filter(async (file) => {
70
+ const fullPathFile = `${basePath}/${file}`;
71
+ const stat = await promises_1.default.stat(fullPathFile);
72
+ // Si es un directorio, no lo incluimos.
73
+ if (stat?.isDirectory()) {
74
+ return false;
75
+ }
76
+ // Si es un archivo pero no tiene la extensión `.json`, no lo incluimos
77
+ if (node_path_1.default.extname(file) !== ".json") {
78
+ return false;
79
+ }
80
+ // no es dir, es json.
81
+ return true;
82
+ })
83
+ .map((page) => {
84
+ return node_path_1.default.join(basePath, page);
85
+ });
86
+ }
87
+ /**
88
+ * Save the pages into the file system.
89
+ * @param pages - An array of Griddo page objects to be saved.
90
+ */
91
+ async function saveSitePagesInStore(siteDirName, pages) {
92
+ const { __root } = await (0, render_1.getRenderPathsFromDB)();
93
+ try {
94
+ for (const page of pages) {
95
+ (0, core_utils_1.removeProperties)(page, ["editorID", "parentEditorID"]);
96
+ const filename = `${page.context.page.id}.json`;
97
+ const filePath = node_path_1.default.join(__root, "store", siteDirName, filename);
98
+ // En los listados estáticos y multipage los ids de las páginas son iguales
99
+ await writeUniqueFileSync(filePath, JSON.stringify(page));
100
+ }
101
+ }
102
+ catch (error) {
103
+ (0, errors_2.throwError)(errors_1.WriteToStoreError, error);
104
+ }
105
+ }
106
+ /**
107
+ * Removes JSON files from the specified site directory based on the provided arrays of page numbers.
108
+ * For each number in the arrays, a corresponding file with the format `<number>.json` is removed if it exists.
109
+ *
110
+ * WARNING: This function may end up handling large arrays, so don't be tempted
111
+ * to refactor it to use something cool like the spread operator and make a
112
+ * single array, etc..
113
+ *
114
+ * @param siteDirName - The name of the site directory containing the pages.
115
+ * @param pageIdsArray - A two-dimensional array where each inner array contains numbers representing page files to be removed.
116
+ */
117
+ async function removeSitePagesFromStore(siteDirName, pageIdsArray) {
118
+ const { __root } = await (0, render_1.getRenderPathsFromDB)();
119
+ const processPageIdsArray = async (pageIds) => {
120
+ for (const filename of pageIds) {
121
+ const filePath = node_path_1.default.join(__root, "store", siteDirName, `${filename}.json`);
122
+ try {
123
+ if (await (0, folders_1.pathExists)(filePath)) {
124
+ await promises_1.default.unlink(filePath);
125
+ (0, loggin_1.verboseLog)(`Removed file: ${filePath}`);
126
+ }
127
+ }
128
+ catch (error) {
129
+ console.log(error);
130
+ throw new Error(`Error removing file ${filename}`);
131
+ }
132
+ }
133
+ };
134
+ for (const pageIds of pageIdsArray) {
135
+ await processPageIdsArray(pageIds);
136
+ }
137
+ }
138
+ /**
139
+ * Removes sites that exist in the store that should no longer be there because
140
+ * the domain has been changed. This is necessary because those sites will not
141
+ * be marked as `sitesToUnpublish` so they must be removed manually.
142
+ */
143
+ async function removeOrphanSites(sitesToPublish, domain) {
144
+ const { __root } = await (0, render_1.getRenderPathsFromDB)({ domain });
145
+ const storePath = node_path_1.default.join(__root, "store");
146
+ if (!(await (0, folders_1.pathExists)(storePath))) {
147
+ return;
148
+ }
149
+ const currentSitesInStore = await promises_1.default.readdir(storePath);
150
+ const sitesFromAPI = sitesToPublish.map(({ id }) => `${id}`);
151
+ const sitesToDelete = currentSitesInStore.filter((site) => !sitesFromAPI.includes(site));
152
+ for (const site of sitesToDelete) {
153
+ await promises_1.default.rm(node_path_1.default.join(storePath, site), { recursive: true, force: true });
154
+ (0, loggin_1.verboseLog)(`Removed orphan site id: ${site}`);
155
+ }
156
+ }
157
+ /**
158
+ * Get pages that are not active anymore but are in the store.
159
+ */
160
+ async function getZombiePagesInStore(siteDir, activePages) {
161
+ const { __root } = await (0, render_1.getRenderPathsFromDB)();
162
+ const storeDir = node_path_1.default.join(__root, "store", siteDir);
163
+ const sitePages = await promises_1.default.readdir(storeDir);
164
+ const zombiePages = [];
165
+ for (const pageFileName of sitePages) {
166
+ const pageFileNameWithoutExtension = pageFileName.split(".")[0];
167
+ const pageInStore = Number.parseInt(pageFileNameWithoutExtension);
168
+ // What the hell is `pageIdInStore > 0` ??
169
+ // Las páginas de listados estáticos y multipage tiene ids "basura", que
170
+ // en este caso son ids negativos y siempre so borran al final del render.
171
+ // En este caso hay que ignorarlas porque NUNCA van a estar en el
172
+ // `activePages`, estaríamos borrándolas siempre antes de la fase de
173
+ // SSG.
174
+ if (!activePages.includes(pageInStore) && pageInStore > 0) {
175
+ zombiePages.push(pageInStore);
176
+ }
177
+ }
178
+ return zombiePages;
179
+ }
180
+ async function writeUniqueFileSync(filePath, content) {
181
+ const dir = node_path_1.default.dirname(filePath);
182
+ const ext = node_path_1.default.extname(filePath);
183
+ const base = node_path_1.default.basename(filePath, ext);
184
+ let uniquePath = filePath;
185
+ let counter = 1;
186
+ while (await (0, folders_1.pathExists)(uniquePath)) {
187
+ const newName = `${base}-${counter}${ext}`;
188
+ uniquePath = node_path_1.default.join(dir, newName);
189
+ counter++;
190
+ }
191
+ await promises_1.default.writeFile(uniquePath, content);
192
+ }
193
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../exporter/utils/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { RenderContext } from "../shared/context";
2
+ import type { SSG } from "../shared/types";
3
+
4
+ import { removeDirs } from "../../../utils/folders";
5
+
6
+ export async function cleanAction(context: RenderContext<SSG>) {
7
+ const {
8
+ cxArtifacts,
9
+ ssg: { ssgArtifacts },
10
+ } = context;
11
+
12
+ await removeDirs(cxArtifacts.disposables);
13
+ await removeDirs(ssgArtifacts.disposables);
14
+ }
@@ -0,0 +1,20 @@
1
+ import type { RenderContext } from "../shared/context";
2
+ import type { SSG } from "../shared/types";
3
+
4
+ import { saveDetailRenderLog } from "../../../utils/core-utils";
5
+ import { removeDirs } from "../../../utils/folders";
6
+ import { updateCommitFile } from "../../../utils/render";
7
+
8
+ export async function closeAction(context: RenderContext<SSG>) {
9
+ const {
10
+ cxArtifacts,
11
+ ssg: { ssgArtifacts },
12
+ paths: { __cache },
13
+ domain,
14
+ } = context;
15
+
16
+ await saveDetailRenderLog(domain);
17
+ await removeDirs(cxArtifacts.disposables);
18
+ await removeDirs(ssgArtifacts.disposables);
19
+ await updateCommitFile({ basePath: __cache });
20
+ }