@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
@@ -1,105 +1,107 @@
1
- #!/usr/bin/env node
1
+ import type { Report } from "../types/render";
2
2
 
3
- import fs from "node:fs";
3
+ import fsp from "node:fs/promises";
4
4
  import path from "node:path";
5
5
 
6
- import pkgDir from "pkg-dir";
7
-
6
+ import { ArtifactError } from "../constants/errors";
8
7
  import { AuthService } from "../services/auth";
9
8
  import { endSiteRender } from "../services/sites";
10
- import { getConfig } from "../utils/core-utils";
11
9
  import { getInstanceDomains } from "../utils/domains";
10
+ import { throwError } from "../utils/errors";
11
+ import { pathExists } from "../utils/folders";
12
12
  import { infoLog } from "../utils/loggin";
13
+ import { getRenderMetadataFromDB, getRenderMode, getRenderPathsFromDB } from "../utils/render";
13
14
 
14
- const RENDER_BY_DOMAIN = process.env.GRIDDO_RENDER_BY_DOMAINS || "";
15
-
16
- // Where we are going to find export dirs
17
- const execBasePath = pkgDir.sync(path.resolve(__dirname, "../.."))!;
18
-
19
- // Where we are going to find archived exports
20
- const exportArchiveBasePath = path.resolve(execBasePath, "exports/sites");
21
-
22
- type Report = {
23
- authControl:
24
- | {
25
- Authorization: string;
26
- "Cache-Control": string;
27
- lang?: string | undefined;
28
- }
29
- | undefined;
30
- sites: Array<{
31
- siteId: number;
32
- publishHashes: Array<string>;
33
- siteHash: string | null;
34
- unpublishHashes: Array<string>;
35
- publishPagesIds: Array<number>;
36
- }>;
37
- };
38
-
39
- function getDomainRenderReport(domain: string) {
40
- const reports: Array<Report> = [];
41
- const { buildReportFileName } = getConfig();
15
+ const renderByDomains = !!process.env.GRIDDO_RENDER_BY_DOMAINS;
42
16
 
43
- const buildReportFile = path.resolve(
44
- exportArchiveBasePath,
45
- domain,
46
- "dist",
47
- buildReportFileName,
48
- );
17
+ async function getRenderReport(options: {
18
+ domain: string;
19
+ exportsSiteDir: string;
20
+ buildReportFileName: string;
21
+ }) {
22
+ const { buildReportFileName, domain, exportsSiteDir: exportArchiveBasePath } = options;
23
+ const buildReportFile = path.resolve(exportArchiveBasePath, domain, "dist", buildReportFileName);
49
24
 
50
- if (!fs.existsSync(buildReportFile)) {
51
- console.info(`Build report file "${buildReportFile}" not found.`);
25
+ if (!(await pathExists(buildReportFile))) {
26
+ infoLog(`Build report file "${buildReportFile}" not found.`);
27
+ throwError(ArtifactError);
52
28
  }
53
29
 
54
- const buildReport = JSON.parse(fs.readFileSync(buildReportFile, "utf-8"));
55
-
56
- reports.push(buildReport);
57
-
58
- return reports;
30
+ return JSON.parse(await fsp.readFile(buildReportFile, "utf-8")) as Report;
59
31
  }
60
32
 
61
- (async () => {
62
- const sendEndSiteRender = async (reports: Array<Report>) => {
63
- for (const report of reports) {
64
- const sites = report.sites;
33
+ const sendEndSiteRender = async (report: Report) => {
34
+ const sites = report.sites;
65
35
 
66
- for (const site of sites) {
67
- const { siteId, ...body } = site;
36
+ for (const site of sites) {
37
+ const { siteId, ...body } = site;
38
+ infoLog(`Site (${siteId})`);
39
+ await endSiteRender(siteId, body);
40
+ }
41
+ };
68
42
 
69
- console.info(`Site (${siteId})`);
43
+ async function endRender() {
44
+ const { buildReportFileName } = await getRenderMetadataFromDB();
45
+ const { __sites } = await getRenderPathsFromDB();
70
46
 
71
- await endSiteRender(siteId, body);
72
- }
47
+ await AuthService.login();
48
+ if (renderByDomains) {
49
+ const [domain] = process.argv.slice(2);
50
+ const { renderMode } = await getRenderMode(domain);
51
+
52
+ if (renderMode === "IDLE") {
53
+ infoLog(`Skipping build-end for domain ${domain} as it is marked as IDLE.`);
54
+ return;
73
55
  }
74
- };
75
56
 
76
- if (RENDER_BY_DOMAIN) {
77
- await AuthService.login();
78
- const domain = process.argv.splice(2)[0];
79
- const reports = getDomainRenderReport(domain);
57
+ const report = await getRenderReport({
58
+ domain,
59
+ exportsSiteDir: __sites,
60
+ buildReportFileName,
61
+ });
80
62
 
81
63
  infoLog(`Sending ending call to ${domain} sites`);
82
64
 
83
- for (const report of reports) {
84
- for (const site of report.sites) {
85
- site.publishHashes = [...new Set(site.publishHashes)];
86
- site.unpublishHashes = [...new Set(site.unpublishHashes)];
87
- }
65
+ for (const site of report.sites) {
66
+ site.publishHashes = [...new Set(site.publishHashes)];
67
+ site.unpublishHashes = [...new Set(site.unpublishHashes)];
88
68
  }
89
69
 
90
- await sendEndSiteRender(reports);
70
+ await sendEndSiteRender(report);
91
71
  } else {
92
- // Legacy render
72
+ console.log("- LEGACY RENDER MODE -");
93
73
  const domains = await getInstanceDomains();
94
74
  for (const domain of domains) {
95
- const reports = getDomainRenderReport(domain);
75
+ const { renderMode } = await getRenderMode(domain);
76
+
77
+ if (renderMode === "IDLE") {
78
+ infoLog(`Skipping build-end for domain ${domain} as it is marked as IDLE.`);
79
+ return;
80
+ }
81
+
82
+ const report = await getRenderReport({
83
+ domain,
84
+ exportsSiteDir: __sites,
85
+ buildReportFileName,
86
+ });
96
87
 
97
88
  infoLog(`Sending ending call to ${domain} sites`);
98
89
 
99
- await sendEndSiteRender(reports);
90
+ for (const site of report.sites) {
91
+ site.publishHashes = [...new Set(site.publishHashes)];
92
+ site.unpublishHashes = [...new Set(site.unpublishHashes)];
93
+ }
94
+
95
+ await sendEndSiteRender(report);
100
96
  }
101
97
  }
102
- })().catch((err) => {
98
+ }
99
+
100
+ async function main() {
101
+ await endRender();
102
+ }
103
+
104
+ main().catch((err) => {
103
105
  console.error("Error", err?.stdout?.toString() || err);
104
106
  process.exit(1);
105
107
  });
@@ -0,0 +1,30 @@
1
+ import childProcess from "node:child_process";
2
+ import path from "node:path";
3
+
4
+ import { pathExists } from "../utils/folders";
5
+ import { getRenderPathsFromDB } from "../utils/render";
6
+
7
+ async function prepareAssetsDir() {
8
+ const [domain] = process.argv.slice(2);
9
+
10
+ const { __exports } = await getRenderPathsFromDB({ domain });
11
+
12
+ const assetsDir = path.join(__exports, "assets");
13
+ const domainAssetsDir = path.join(__exports, domain);
14
+
15
+ if (await pathExists(assetsDir)) {
16
+ childProcess.execSync(`rm -rf ${domainAssetsDir}`);
17
+ childProcess.execSync(`mv ${assetsDir} ${domainAssetsDir}`);
18
+ } else {
19
+ console.log("Assets directory not found");
20
+ }
21
+ }
22
+
23
+ async function main() {
24
+ await prepareAssetsDir();
25
+ }
26
+
27
+ main().catch((err) => {
28
+ console.error("Error", err?.stdout?.toString() || err);
29
+ process.exit(1);
30
+ });
@@ -1,46 +1,158 @@
1
- import fs from "node:fs";
1
+ import type { RenderDB } from "../types/render";
2
+
3
+ import fsp from "node:fs/promises";
2
4
  import path from "node:path";
3
5
 
4
- import { getConfig } from "../utils/core-utils";
6
+ import { version as griddoVersion } from "../../package.json";
7
+ import { AuthService } from "../services/auth";
8
+ import { readDB, writeDB } from "../services/db";
5
9
  import { getInstanceDomains } from "../utils/domains";
6
- import { infoLog, successLog } from "../utils/loggin";
10
+ import { pathExists, removeDirs } from "../utils/folders";
11
+ import { resolveComponentsPath } from "../utils/instance";
12
+ import { showExporterVersion } from "../utils/loggin";
13
+ import { pkgDir } from "../utils/npm-deps/pkg-dir";
14
+ import { resolveDomainRenderMode } from "../utils/render";
7
15
  import { getSitesToRender } from "../utils/sites";
8
16
 
9
- (async () => {
10
- infoLog("Checking domains size");
17
+ async function getDomainsWithNumberOfPages(domains: Array<string>) {
18
+ const results = await Promise.all(
19
+ domains.map(async (domain) => {
20
+ // Get the sites to render for the domain
21
+ const { sitesToPublish, sitesToUnpublish } = await getSitesToRender(domain);
11
22
 
12
- const { __cx } = getConfig().paths();
23
+ // Only count pages (offlinePending && publishPending) if sitesToPublish
24
+ // is not empty. Otherwise we set the domain has having 0 pages.
25
+ const pages: Array<number> = [];
13
26
 
14
- const domains = await getInstanceDomains();
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
+ if (sitesToPublish.length > 0) {
28
+ for (const site of sitesToPublish) {
29
+ // el site ya está publicado
30
+ if (site.isPublished && !site.shouldBeUpdated) {
31
+ const { pagesStatus } = site;
32
+ const { offlinePending, uploadPending } = pagesStatus;
33
+ const total = offlinePending.length + uploadPending.length;
34
+ pages.push(total);
35
+ }
36
+ // el site esta pendiente de publicar
37
+ if (site.isPublished && site.shouldBeUpdated) {
38
+ const { pagesStatus } = site;
39
+ const { offlinePending, uploadPending, active } = pagesStatus;
40
+ const total = offlinePending.length + uploadPending.length + active.length;
41
+ pages.push(total);
42
+ }
43
+ }
44
+ } else if (sitesToUnpublish.length > 0) {
45
+ // si tiene sites para despublicar marcamos el dominio como que tiene 1 página
46
+ pages.push(1);
47
+ } else {
48
+ // si eldominio no tiene nada ni para publicar ni despublicar lomarcamos como 0
49
+ pages.push(0);
27
50
  }
28
- } else {
29
- pages.push(0);
30
- }
31
51
 
32
- const totalPages = pages.reduce((a, b) => a + b);
33
- domainsInfo.push({ domain, totalPages });
34
- }
52
+ const totalPages = pages.reduce((a, b) => a + b);
35
53
 
36
- // sort domains, smaller first
54
+ return { domain, totalPages };
55
+ }),
56
+ );
57
+
58
+ return results;
59
+ }
60
+
61
+ function getDomainsSortedByNumberOfPages(
62
+ domainsInfo: Array<{
63
+ domain: string;
64
+ totalPages: number;
65
+ }>,
66
+ ) {
37
67
  domainsInfo.sort((a, b) => a.totalPages - b.totalPages);
38
- const domainSorted = domainsInfo.map(({ domain }) => domain);
39
68
 
40
- fs.writeFileSync(domainsFilePath, JSON.stringify(domainSorted));
69
+ return domainsInfo.map(({ domain }) => domain);
70
+ }
71
+
72
+ async function initRender() {
73
+ const root = (await pkgDir({ cwd: path.resolve(__dirname, "../../..") })) || "";
74
+ const cx = root;
75
+ const ssg = path.resolve((await pkgDir({ cwd: __dirname })) || "");
76
+ const cxCache = path.resolve(root, ".cx-cache");
77
+ const components = resolveComponentsPath();
78
+ const exportsDir = path.join(root, "exports/sites");
79
+
80
+ const data: RenderDB = {
81
+ proDomainPrefix: "pro-",
82
+ griddoVersion,
83
+ buildReportFileName: "build-report.json",
84
+ sortedDomains: [],
85
+ domains: {},
86
+ paths: {
87
+ components,
88
+ cx,
89
+ cxCache,
90
+ exportsDir,
91
+ root,
92
+ ssg,
93
+ },
94
+ };
95
+
96
+ // create the main cache folder for cx if it doesn't exist.
97
+ if (!(await pathExists(cxCache))) {
98
+ await fsp.mkdir(cxCache, { recursive: true });
99
+ }
100
+
101
+ await writeDB(data);
102
+ }
103
+
104
+ async function prepareDomains() {
105
+ await AuthService.login();
106
+
107
+ const db = await readDB();
108
+
109
+ const __ssg = db.paths.ssg;
110
+ const domains = await getInstanceDomains();
111
+ const domainsWithNumberOfPages = await getDomainsWithNumberOfPages(domains);
112
+ const domainSorted = getDomainsSortedByNumberOfPages(domainsWithNumberOfPages);
113
+
114
+ // @deprecated use db.json (only for infra)
115
+ await fsp.writeFile(path.join(__ssg, "domains.json"), JSON.stringify(domainSorted));
116
+ await fsp.writeFile(path.join(__ssg, "domains.txt"), domainSorted.join(","));
117
+
118
+ db.sortedDomains = domainSorted;
119
+ db.domains = {};
120
+
121
+ for (const { domain, totalPages } of domainsWithNumberOfPages) {
122
+ const shouldBeRendered = totalPages > 0;
123
+ const { renderMode, reason } = await resolveDomainRenderMode({
124
+ domain,
125
+ shouldBeRendered,
126
+ });
127
+
128
+ db.domains[domain] = db.domains[domain] || {};
129
+ db.domains[domain].renderMode = renderMode;
130
+ db.domains[domain].shouldBeRendered = shouldBeRendered;
131
+ db.domains[domain].renderModeReason = reason;
132
+ }
133
+
134
+ await writeDB(db);
135
+ }
136
+
137
+ async function clean() {
138
+ const db = await readDB();
139
+ const { root: __root } = db.paths;
140
+ await removeDirs([path.join(__root, "apiCache")]);
141
+ }
142
+
143
+ /**
144
+ * Prepare domains to render.
145
+ * It creates a `domains.json` file with the sorted list of domains and writes a
146
+ * `RENDE-STATE.json` file to persist a state between all cx-infra commands.
147
+ */
148
+ async function main() {
149
+ await showExporterVersion();
150
+ await initRender();
151
+ await prepareDomains();
152
+ await clean();
153
+ }
41
154
 
42
- successLog(`Checking domains size`);
43
- })().catch((err) => {
44
- console.error(err);
155
+ main().catch((err) => {
156
+ console.error("Error", err?.stdout?.toString() || err);
45
157
  process.exit(1);
46
158
  });
@@ -1,11 +1,18 @@
1
- #!/usr/bin/env node
2
-
1
+ import { RESET_RENDER } from "../constants/endpoints";
3
2
  import { AuthService } from "../services/auth";
4
- import { resetRender } from "../services/settings";
3
+ import { post } from "../utils/api";
4
+
5
+ async function resetRender() {
6
+ await post({
7
+ endpoint: RESET_RENDER,
8
+ useApiCacheDir: false,
9
+ });
10
+ }
5
11
 
6
12
  async function main() {
7
13
  await AuthService.login();
8
14
  await resetRender();
15
+ console.log(`The render status has been reset.`);
9
16
  }
10
17
 
11
18
  main().catch((err) => {
@@ -1,68 +1,45 @@
1
- #!/usr/bin/env node
2
- import { renderDomainsWithGatsbyAdapter } from "../adapters/gatsby";
3
- import { RenderError } from "../errors";
1
+ import { gatsbyRenderDomain } from "../adapters/gatsby";
2
+ import { AuthService } from "../services/auth";
3
+ import { brush } from "../utils/brush";
4
+ import { checkEnvironmentHealth } from "../utils/check-environment-health";
4
5
  import { getInstanceDomains } from "../utils/domains";
5
- import { errorLabelLog, showExporterVersion } from "../utils/loggin";
6
- import { sendGriddoDefaultAlerts } from "../utils/render";
6
+ import { RenderError } from "../utils/errors";
7
7
 
8
- const GRIDDO_RENDER_DOMAINS = process.env.GRIDDO_RENDER_DOMAINS || "";
9
- const RENDER_BY_DOMAIN = process.env.GRIDDO_RENDER_BY_DOMAINS || "";
8
+ const renderByDomains = !!process.env.GRIDDO_RENDER_BY_DOMAINS;
10
9
 
11
10
  async function startRender() {
12
11
  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
- }
24
-
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];
29
-
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);
12
+ if (renderByDomains) {
13
+ const [domain] = process.argv.slice(2);
14
+ await gatsbyRenderDomain(domain);
40
15
  } else {
41
- showExporterVersion();
42
-
43
- console.log("( Legacy Render Mode )\n");
44
-
16
+ console.log("- LEGACY RENDER MODE -");
45
17
  const domains = await getInstanceDomains();
46
-
47
18
  for (const domain of domains) {
48
- await renderDomainsWithGatsbyAdapter(domain);
49
- await sendGriddoDefaultAlerts();
19
+ await gatsbyRenderDomain(domain);
50
20
  }
51
- process.exit(0);
52
21
  }
22
+
23
+ return;
53
24
  } catch (error) {
54
25
  if (error instanceof RenderError) {
55
- errorLabelLog("GRIDDO_ERROR InternalCXError");
26
+ console.log(brush.red("GRIDDO_ERROR InternalCXError"));
56
27
  process.exit(1);
57
28
  }
58
29
 
59
- errorLabelLog("GRIDDO_ERROR UnknownError");
30
+ console.log(brush.red("GRIDDO_ERROR UnknownError"));
60
31
  console.error(error);
61
32
  process.exit(1);
62
33
  }
63
34
  }
64
35
 
65
- startRender().catch((err) => {
36
+ async function main() {
37
+ checkEnvironmentHealth();
38
+ await AuthService.login();
39
+ await startRender();
40
+ }
41
+
42
+ main().catch((err) => {
66
43
  console.error("Error", err?.stdout?.toString() || err);
67
44
  process.exit(1);
68
45
  });