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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (254) hide show
  1. package/README.md +240 -13
  2. package/build/adapters/gatsby/index.d.ts +4 -0
  3. package/build/adapters/gatsby/utils.d.ts +22 -0
  4. package/build/artifacts/index.d.ts +6 -0
  5. package/build/commands/end-render.d.ts +1 -0
  6. package/build/commands/reset-render.d.ts +1 -0
  7. package/build/commands/start-render.d.ts +1 -0
  8. package/build/commands/upload-search-content.d.ts +1 -0
  9. package/build/constants/envs.d.ts +37 -0
  10. package/build/constants/index.d.ts +57 -0
  11. package/build/end-render.js +74 -0
  12. package/build/end-render.js.map +7 -0
  13. package/build/{shared/errors.d.ts → errors/errors-data.d.ts} +3 -5
  14. package/build/errors/index.d.ts +15 -0
  15. package/build/index.d.ts +29 -10
  16. package/build/index.js +73 -406
  17. package/build/index.js.map +7 -0
  18. package/build/prepare-domains-render.js +73 -0
  19. package/build/prepare-domains-render.js.map +7 -0
  20. package/build/react/Favicon/index.d.ts +5 -0
  21. package/build/react/GriddoIntegrations/index.d.ts +4 -3
  22. package/build/react/GriddoIntegrations/utils.d.ts +6 -7
  23. package/build/react/index.d.ts +2 -3
  24. package/build/react/index.js +3 -1
  25. package/build/registers/api.d.ts +9 -0
  26. package/build/registers/gatsby.d.ts +9 -0
  27. package/build/registers/index.d.ts +3 -0
  28. package/build/reset-render.js +74 -0
  29. package/build/reset-render.js.map +7 -0
  30. package/build/services/auth.d.ts +5 -2
  31. package/build/services/domains.d.ts +4 -3
  32. package/build/services/navigation.d.ts +16 -16
  33. package/build/services/reference-fields.d.ts +3 -3
  34. package/build/services/register.d.ts +36 -0
  35. package/build/services/robots.d.ts +19 -2
  36. package/build/services/settings.d.ts +4 -0
  37. package/build/services/sites.d.ts +5 -8
  38. package/build/services/store.d.ts +1 -10
  39. package/build/start-render.js +100 -0
  40. package/build/start-render.js.map +7 -0
  41. package/build/{shared/types → types}/api.d.ts +18 -18
  42. package/build/{shared/types → types}/global.d.ts +16 -15
  43. package/build/{shared/types → types}/navigation.d.ts +5 -5
  44. package/build/{shared/types → types}/pages.d.ts +9 -9
  45. package/build/{shared/types → types}/sites.d.ts +19 -18
  46. package/build/upload-search-content.js +74 -0
  47. package/build/upload-search-content.js.map +7 -0
  48. package/build/utils/alerts.d.ts +3 -0
  49. package/build/{services → utils}/api.d.ts +1 -1
  50. package/build/utils/cache.d.ts +35 -0
  51. package/build/utils/core-utils.d.ts +107 -0
  52. package/build/utils/create-build-data.d.ts +8 -0
  53. package/build/utils/domains.d.ts +13 -0
  54. package/build/utils/folders.d.ts +53 -0
  55. package/build/{core/check-env-health.d.ts → utils/health-checks.d.ts} +2 -4
  56. package/build/utils/loggin.d.ts +51 -0
  57. package/build/{services → utils}/pages.d.ts +3 -3
  58. package/build/utils/render.d.ts +13 -0
  59. package/build/utils/searches.d.ts +15 -0
  60. package/build/utils/sites.d.ts +31 -0
  61. package/build/utils/store.d.ts +81 -0
  62. package/cx.config.d.ts +5 -0
  63. package/cx.config.js +36 -0
  64. package/exporter/adapters/gatsby/index.ts +162 -0
  65. package/exporter/adapters/gatsby/utils.ts +161 -0
  66. package/exporter/artifacts/README.md +34 -0
  67. package/exporter/artifacts/index.ts +33 -0
  68. package/exporter/build.sh +24 -16
  69. package/exporter/commands/end-render.ts +86 -65
  70. package/exporter/commands/move-assets.ts +11 -0
  71. package/exporter/commands/prepare-domains-render.ts +35 -147
  72. package/exporter/commands/reset-render.ts +8 -13
  73. package/exporter/commands/start-render.ts +64 -26
  74. package/exporter/commands/upload-search-content.ts +26 -201
  75. package/exporter/{shared → constants}/endpoints.ts +11 -12
  76. package/exporter/constants/envs.ts +94 -0
  77. package/exporter/constants/index.ts +129 -0
  78. package/exporter/{shared/errors.ts → errors/errors-data.ts} +14 -24
  79. package/exporter/errors/index.ts +40 -0
  80. package/exporter/index.ts +56 -14
  81. package/exporter/react/{GriddoFavicon → Favicon}/index.tsx +9 -3
  82. package/exporter/react/GriddoIntegrations/index.tsx +23 -17
  83. package/exporter/react/GriddoIntegrations/utils.ts +12 -24
  84. package/exporter/react/index.tsx +9 -3
  85. package/exporter/registers/api.ts +14 -0
  86. package/exporter/registers/gatsby.ts +14 -0
  87. package/exporter/registers/index.ts +4 -0
  88. package/exporter/services/auth.ts +10 -8
  89. package/exporter/services/domains.ts +8 -23
  90. package/exporter/services/navigation.ts +18 -12
  91. package/exporter/services/reference-fields.ts +32 -14
  92. package/exporter/services/register.ts +113 -0
  93. package/exporter/services/robots.ts +61 -33
  94. package/exporter/services/settings.ts +17 -0
  95. package/exporter/services/sites.ts +28 -40
  96. package/exporter/services/store.ts +321 -354
  97. package/exporter/{shared/types → types}/api.ts +41 -40
  98. package/exporter/{shared/types → types}/global.ts +21 -17
  99. package/exporter/{shared/types → types}/navigation.ts +3 -3
  100. package/exporter/{shared/types → types}/pages.ts +11 -10
  101. package/exporter/{shared/types → types}/sites.ts +19 -18
  102. package/exporter/utils/alerts.ts +29 -0
  103. package/exporter/utils/api.ts +243 -0
  104. package/exporter/utils/cache.ts +142 -0
  105. package/exporter/utils/core-utils.ts +458 -0
  106. package/exporter/utils/create-build-data.ts +17 -0
  107. package/exporter/utils/domains.ts +39 -0
  108. package/exporter/utils/folders.ts +320 -0
  109. package/exporter/utils/health-checks.ts +64 -0
  110. package/exporter/{core → utils}/images.ts +6 -1
  111. package/exporter/{core → utils}/instance.ts +13 -9
  112. package/exporter/utils/loggin.ts +184 -0
  113. package/exporter/{services → utils}/pages.ts +92 -27
  114. package/exporter/utils/render.ts +71 -0
  115. package/exporter/utils/searches.ts +156 -0
  116. package/exporter/utils/sites.ts +312 -0
  117. package/exporter/utils/store.ts +314 -0
  118. package/gatsby-browser.tsx +58 -41
  119. package/gatsby-config.ts +17 -10
  120. package/gatsby-node.ts +79 -20
  121. package/gatsby-ssr.tsx +1 -2
  122. package/package.json +80 -41
  123. package/src/README.md +7 -0
  124. package/src/components/Head.tsx +73 -28
  125. package/src/components/template.tsx +29 -6
  126. package/src/gatsby-node-utils.ts +2 -76
  127. package/src/html.tsx +11 -2
  128. package/src/types.ts +3 -3
  129. package/start-render.js +7 -0
  130. package/tsconfig.json +3 -5
  131. package/build/commands/end-render.js +0 -31
  132. package/build/commands/end-render.js.map +0 -7
  133. package/build/commands/prepare-assets-directory.js +0 -9
  134. package/build/commands/prepare-assets-directory.js.map +0 -7
  135. package/build/commands/prepare-domains-render.js +0 -38
  136. package/build/commands/prepare-domains-render.js.map +0 -7
  137. package/build/commands/reset-render.js +0 -31
  138. package/build/commands/reset-render.js.map +0 -7
  139. package/build/commands/single-domain-upload-search-content.d.ts +0 -1
  140. package/build/commands/start-render.js +0 -66
  141. package/build/commands/start-render.js.map +0 -7
  142. package/build/commands/upload-search-content.js +0 -31
  143. package/build/commands/upload-search-content.js.map +0 -7
  144. package/build/core/GriddoLog.d.ts +0 -16
  145. package/build/core/db-class.d.ts +0 -11
  146. package/build/core/db.d.ts +0 -4
  147. package/build/core/dist-rollback.d.ts +0 -11
  148. package/build/core/errors.d.ts +0 -26
  149. package/build/core/fs.d.ts +0 -69
  150. package/build/core/life-cycle.d.ts +0 -26
  151. package/build/core/logger.d.ts +0 -18
  152. package/build/core/objects.d.ts +0 -11
  153. package/build/core/print-logos.d.ts +0 -5
  154. package/build/react/DynamicScript/index.d.ts +0 -4
  155. package/build/react/GriddoFavicon/index.d.ts +0 -4
  156. package/build/react/GriddoOpenGraph/index.d.ts +0 -10
  157. package/build/services/manage-sites.d.ts +0 -22
  158. package/build/services/manage-store.d.ts +0 -32
  159. package/build/services/render-artifacts.d.ts +0 -6
  160. package/build/services/render.d.ts +0 -70
  161. package/build/services/sitemaps.d.ts +0 -5
  162. package/build/shared/context.d.ts +0 -36
  163. package/build/shared/envs.d.ts +0 -19
  164. package/build/shared/npm-modules/brush.d.ts +0 -18
  165. package/build/shared/npm-modules/find-up-simple.d.ts +0 -34
  166. package/build/shared/npm-modules/pkg-dir.d.ts +0 -7
  167. package/build/shared/npm-modules/xml-parser.d.ts +0 -4
  168. package/build/shared/types/render.d.ts +0 -54
  169. package/build/shared/types.d.ts +0 -15
  170. package/build/ssg-adapters/gatsby/actions/clean.d.ts +0 -3
  171. package/build/ssg-adapters/gatsby/actions/close.d.ts +0 -3
  172. package/build/ssg-adapters/gatsby/actions/data.d.ts +0 -2
  173. package/build/ssg-adapters/gatsby/actions/healthCheck.d.ts +0 -2
  174. package/build/ssg-adapters/gatsby/actions/init.d.ts +0 -2
  175. package/build/ssg-adapters/gatsby/actions/logs.d.ts +0 -3
  176. package/build/ssg-adapters/gatsby/actions/meta.d.ts +0 -2
  177. package/build/ssg-adapters/gatsby/actions/prepare.d.ts +0 -2
  178. package/build/ssg-adapters/gatsby/actions/relocation.d.ts +0 -2
  179. package/build/ssg-adapters/gatsby/actions/restore.d.ts +0 -3
  180. package/build/ssg-adapters/gatsby/actions/ssg.d.ts +0 -3
  181. package/build/ssg-adapters/gatsby/actions/sync.d.ts +0 -3
  182. package/build/ssg-adapters/gatsby/index.d.ts +0 -9
  183. package/build/ssg-adapters/gatsby/shared/artifacts.d.ts +0 -4
  184. package/build/ssg-adapters/gatsby/shared/diff-assets.d.ts +0 -15
  185. package/build/ssg-adapters/gatsby/shared/extract-assets.d.ts +0 -7
  186. package/build/ssg-adapters/gatsby/shared/gatsby-build.d.ts +0 -7
  187. package/build/ssg-adapters/gatsby/shared/render-rollback.d.ts +0 -18
  188. package/build/ssg-adapters/gatsby/shared/sync-render.d.ts +0 -26
  189. package/build/ssg-adapters/gatsby/shared/types.d.ts +0 -34
  190. package/cli.mjs +0 -231
  191. package/exporter/build-esbuild.noop +0 -42
  192. package/exporter/commands/README.md +0 -151
  193. package/exporter/commands/prepare-assets-directory.ts +0 -34
  194. package/exporter/commands/single-domain-upload-search-content.ts +0 -206
  195. package/exporter/core/GriddoLog.ts +0 -45
  196. package/exporter/core/check-env-health.ts +0 -204
  197. package/exporter/core/db-class.ts +0 -54
  198. package/exporter/core/db.ts +0 -33
  199. package/exporter/core/dist-rollback.ts +0 -49
  200. package/exporter/core/errors.ts +0 -92
  201. package/exporter/core/fs.ts +0 -385
  202. package/exporter/core/life-cycle.ts +0 -73
  203. package/exporter/core/logger.ts +0 -141
  204. package/exporter/core/objects.ts +0 -37
  205. package/exporter/core/print-logos.ts +0 -21
  206. package/exporter/react/DynamicScript/index.tsx +0 -33
  207. package/exporter/react/GriddoOpenGraph/index.tsx +0 -39
  208. package/exporter/services/api.ts +0 -306
  209. package/exporter/services/manage-sites.ts +0 -116
  210. package/exporter/services/manage-store.ts +0 -173
  211. package/exporter/services/render-artifacts.ts +0 -44
  212. package/exporter/services/render.ts +0 -229
  213. package/exporter/services/sitemaps.ts +0 -129
  214. package/exporter/shared/context.ts +0 -49
  215. package/exporter/shared/envs.ts +0 -62
  216. package/exporter/shared/npm-modules/README.md +0 -36
  217. package/exporter/shared/npm-modules/brush.ts +0 -34
  218. package/exporter/shared/npm-modules/find-up-simple.ts +0 -100
  219. package/exporter/shared/npm-modules/pkg-dir.ts +0 -17
  220. package/exporter/shared/npm-modules/xml-parser.ts +0 -57
  221. package/exporter/shared/types/render.ts +0 -63
  222. package/exporter/shared/types.ts +0 -15
  223. package/exporter/ssg-adapters/gatsby/actions/clean.ts +0 -26
  224. package/exporter/ssg-adapters/gatsby/actions/close.ts +0 -17
  225. package/exporter/ssg-adapters/gatsby/actions/data.ts +0 -22
  226. package/exporter/ssg-adapters/gatsby/actions/healthCheck.ts +0 -10
  227. package/exporter/ssg-adapters/gatsby/actions/init.ts +0 -12
  228. package/exporter/ssg-adapters/gatsby/actions/logs.ts +0 -10
  229. package/exporter/ssg-adapters/gatsby/actions/meta.ts +0 -13
  230. package/exporter/ssg-adapters/gatsby/actions/prepare.ts +0 -9
  231. package/exporter/ssg-adapters/gatsby/actions/relocation.ts +0 -15
  232. package/exporter/ssg-adapters/gatsby/actions/restore.ts +0 -21
  233. package/exporter/ssg-adapters/gatsby/actions/ssg.ts +0 -12
  234. package/exporter/ssg-adapters/gatsby/actions/sync.ts +0 -65
  235. package/exporter/ssg-adapters/gatsby/index.ts +0 -114
  236. package/exporter/ssg-adapters/gatsby/shared/artifacts.ts +0 -17
  237. package/exporter/ssg-adapters/gatsby/shared/diff-assets.ts +0 -128
  238. package/exporter/ssg-adapters/gatsby/shared/extract-assets.ts +0 -75
  239. package/exporter/ssg-adapters/gatsby/shared/gatsby-build.ts +0 -58
  240. package/exporter/ssg-adapters/gatsby/shared/render-rollback.ts +0 -33
  241. package/exporter/ssg-adapters/gatsby/shared/sync-render.ts +0 -298
  242. package/exporter/ssg-adapters/gatsby/shared/types.ts +0 -35
  243. package/plugins/gatsby-plugin-svgr-loader/gatsby-node.js +0 -55
  244. package/plugins/gatsby-plugin-svgr-loader/package.json +0 -8
  245. package/tsconfig.commands.json +0 -36
  246. package/tsconfig.exporter.json +0 -21
  247. /package/build/commands/{prepare-assets-directory.d.ts → move-assets.d.ts} +0 -0
  248. /package/build/{shared → constants}/endpoints.d.ts +0 -0
  249. /package/build/react/{GriddoFavicon → Favicon}/utils.d.ts +0 -0
  250. /package/build/{shared/types → types}/templates.d.ts +0 -0
  251. /package/build/{core → utils}/images.d.ts +0 -0
  252. /package/build/{core → utils}/instance.d.ts +0 -0
  253. /package/exporter/react/{GriddoFavicon → Favicon}/utils.ts +0 -0
  254. /package/exporter/{shared/types → types}/templates.ts +0 -0
@@ -1,57 +0,0 @@
1
- import type { SitemapItem } from "../types/api";
2
-
3
- function escapeXml(unsafe: string) {
4
- return unsafe.replace(/[<>&'"”]/g, (c) => {
5
- switch (c) {
6
- case "<":
7
- return "&lt;";
8
- case ">":
9
- return "&gt;";
10
- case "&":
11
- return "&amp;";
12
- case "'":
13
- return "&apos;";
14
- case '"':
15
- return "&quot;";
16
- case "”":
17
- return "&quot;";
18
- default:
19
- return c;
20
- }
21
- });
22
- }
23
-
24
- function generateUrlsetXml(pages: SitemapItem[]) {
25
- const urls = pages
26
- .map(
27
- (page) =>
28
- ` <url>
29
- <loc>${escapeXml(page.loc)}</loc>
30
- <lastmod>${page.lastmod}</lastmod>
31
- <priority>${page.priority}</priority>
32
- </url>`,
33
- )
34
- .join("\n");
35
-
36
- return `<?xml version="1.0" encoding="UTF-8"?>
37
- <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
38
- ${urls}
39
- </urlset>`;
40
- }
41
-
42
- function generateSitemapIndexXml(sitemaps: string[]) {
43
- const sitemapEntries = sitemaps
44
- .map(
45
- (loc) => ` <sitemap>
46
- <loc>${escapeXml(loc)}</loc>
47
- </sitemap>`,
48
- )
49
- .join("\n");
50
-
51
- return `<?xml version="1.0" encoding="UTF-8"?>
52
- <sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
53
- ${sitemapEntries}
54
- </sitemapindex>`;
55
- }
56
-
57
- export { generateSitemapIndexXml, generateUrlsetXml };
@@ -1,63 +0,0 @@
1
- import type { RenderInfo } from "./global";
2
-
3
- const RENDER_MODE = {
4
- FROM_SCRATCH: "FROM_SCRATCH",
5
- INCREMENTAL: "INCREMENTAL",
6
- IDLE: "IDLE",
7
- ERROR: "ERROR",
8
- COMPLETED: "COMPLETED",
9
- } as const;
10
-
11
- type RenderMode = (typeof RENDER_MODE)[keyof typeof RENDER_MODE];
12
-
13
- export interface RenderModeTuple {
14
- renderMode: RenderMode;
15
- reason?: string;
16
- }
17
-
18
- type DomainLike = string;
19
-
20
- type RenderDB = {
21
- griddoVersion: string;
22
- buildReportFileName: string;
23
- sortedDomains: DomainLike[];
24
- needsRollbackOnError: boolean;
25
- currentRenderingDomain: string | null;
26
- paths: {
27
- root: string;
28
- cx: string;
29
- ssg: string;
30
- cxCache: string;
31
- components: string;
32
- exportsDir: string;
33
- exportsDirBackup: string;
34
- };
35
- domains: {
36
- [key: DomainLike]: {
37
- renderMode?: RenderMode;
38
- shouldBeRendered?: boolean;
39
- isRendering?: boolean;
40
- renderInfo?: RenderInfo;
41
- renderModeReason?: string;
42
- };
43
- };
44
- };
45
-
46
- interface Report {
47
- authControl:
48
- | {
49
- Authorization: string;
50
- "Cache-Control": string;
51
- lang?: string | undefined;
52
- }
53
- | undefined;
54
- sites: {
55
- siteId: number;
56
- publishHashes: string[];
57
- siteHash: string | null;
58
- unpublishHashes: string[];
59
- publishPagesIds: number[];
60
- }[];
61
- }
62
-
63
- export { RENDER_MODE, type RenderDB, type RenderMode, type Report };
@@ -1,15 +0,0 @@
1
- import type { Core } from "@griddo/core";
2
- import type { Dimensions, GriddoPageObject } from "@griddo/cx";
3
- import type { HeadProps } from "gatsby";
4
-
5
- interface CustomHeadProps extends HeadProps {
6
- pageContext: GriddoPageObject["context"] & {
7
- page: Core.Page & {
8
- defaultLang: { id: number };
9
- dimensions: Dimensions;
10
- disableHrefLangs: number[];
11
- };
12
- };
13
- }
14
-
15
- export type { CustomHeadProps };
@@ -1,26 +0,0 @@
1
- import type { RenderContext } from "../../../shared/context";
2
- import type { SSG } from "../shared/types";
3
-
4
- import fsp from "node:fs/promises";
5
- import path from "node:path";
6
-
7
- import { rmDirs } from "../../../core/fs";
8
- import { RENDER_MODE } from "../../../shared/types/render";
9
-
10
- export async function cleanAction(context: RenderContext<SSG>) {
11
- const {
12
- renderArtifacts,
13
- ssg: { ssgArtifacts },
14
- pathsHydratedWithDomain: { __cache, __exports },
15
- renderMode,
16
- } = context;
17
-
18
- if (renderMode === RENDER_MODE.FROM_SCRATCH) {
19
- await fsp.rm(path.join(__cache, ".cache"), { recursive: true, force: true });
20
- await fsp.rm(path.join(__exports, "dist"), { recursive: true, force: true });
21
- await fsp.rm(path.join(__exports, "assets"), { recursive: true, force: true });
22
- }
23
-
24
- await rmDirs(renderArtifacts.disposables);
25
- await rmDirs(ssgArtifacts.disposables);
26
- }
@@ -1,17 +0,0 @@
1
- import type { RenderContext } from "../../../shared/context";
2
- import type { SSG } from "../shared/types";
3
-
4
- import { rmDirs } from "../../../core/fs";
5
- import { updateCommitFile } from "../../../services/render";
6
-
7
- export async function closeAction(context: RenderContext<SSG>) {
8
- const {
9
- renderArtifacts,
10
- ssg: { ssgArtifacts },
11
- pathsHydratedWithDomain: { __cache },
12
- } = context;
13
-
14
- await rmDirs(renderArtifacts.disposables);
15
- await rmDirs(ssgArtifacts.disposables);
16
- await updateCommitFile({ basePath: __cache });
17
- }
@@ -1,22 +0,0 @@
1
- import type { RenderContext } from "../../../shared/context";
2
-
3
- import { createStore } from "../../../services/store";
4
-
5
- export async function dataAction(context: RenderContext) {
6
- const {
7
- domain,
8
- renderMode,
9
- renderMetadata: { griddoVersion },
10
- pathsHydratedWithDomain: { __root },
11
- } = context;
12
-
13
- const { pagesToCreate, pagesToDelete } = await createStore({
14
- domain,
15
- renderMode,
16
- griddoVersion,
17
- basePath: __root,
18
- });
19
-
20
- context.pagesToCreate = pagesToCreate;
21
- context.pagesToDelete = pagesToDelete;
22
- }
@@ -1,10 +0,0 @@
1
- import type { RenderContext } from "../../../shared/context";
2
-
3
- import { assertRenderIsValid, markRenderAsCompleted } from "../../../services/render";
4
-
5
- export async function healthCheckAction(context: RenderContext) {
6
- const { domain } = context;
7
-
8
- await assertRenderIsValid(domain);
9
- await markRenderAsCompleted(domain);
10
- }
@@ -1,12 +0,0 @@
1
- import type { RenderContext } from "../../../shared/context";
2
-
3
- import { markRenderAsStarted } from "../../../services/render";
4
-
5
- export async function initAction(context: RenderContext) {
6
- const {
7
- domain,
8
- pathsHydratedWithDomain: { __root },
9
- } = context;
10
-
11
- await markRenderAsStarted({ basePath: __root, domain });
12
- }
@@ -1,10 +0,0 @@
1
- import type { RenderContext } from "../../../shared/context";
2
- import type { SSG } from "../shared/types";
3
-
4
- import { saveDetailRenderLog } from "../../../core/logger";
5
-
6
- export async function logsAction(context: RenderContext<SSG>) {
7
- const { domain } = context;
8
-
9
- await saveDetailRenderLog(domain);
10
- }
@@ -1,13 +0,0 @@
1
- import type { RenderContext } from "../../../shared/context";
2
-
3
- import { generateBuildReport } from "../../../services/render";
4
- import { generateRobots } from "../../../services/robots";
5
- import { generateSitemaps } from "../../../services/sitemaps";
6
-
7
- export async function metaAction(context: RenderContext) {
8
- const { domain } = context;
9
-
10
- await generateBuildReport(domain);
11
- await generateSitemaps(domain);
12
- await generateRobots(domain);
13
- }
@@ -1,9 +0,0 @@
1
- import type { RenderContext } from "../../../shared/context";
2
-
3
- import { mkDirs } from "../../../core/fs";
4
-
5
- export async function prepareAction(context: RenderContext) {
6
- const { renderArtifacts } = context;
7
-
8
- await mkDirs(renderArtifacts.initials);
9
- }
@@ -1,15 +0,0 @@
1
- import type { RenderContext } from "../../../shared/context";
2
-
3
- import fsp from "node:fs/promises";
4
- import path from "node:path";
5
-
6
- export async function relocationAction(context: RenderContext) {
7
- const {
8
- pathsHydratedWithDomain: { __root, __ssg },
9
- } = context;
10
-
11
- const src = path.join(__ssg, "public");
12
- const dst = path.join(__root, "current-dist");
13
-
14
- await fsp.rename(src, dst);
15
- }
@@ -1,21 +0,0 @@
1
- import type { RenderContext } from "../../../shared/context";
2
- import type { SSG } from "../shared/types";
3
-
4
- import { cpDirs, mvDirs } from "../../../core/fs";
5
- import { RENDER_MODE } from "../../../shared/types/render";
6
-
7
- export async function restoreAction(context: RenderContext<SSG>) {
8
- const {
9
- renderMode,
10
- ssg: { ssgArtifacts },
11
- renderArtifacts,
12
- pathsHydratedWithDomain: { __components, __root, __cache, __ssg },
13
- } = context;
14
-
15
- await cpDirs(__components, __ssg, ["static"]);
16
-
17
- if (renderMode === RENDER_MODE.INCREMENTAL) {
18
- await mvDirs(__cache, __ssg, ssgArtifacts.cacheables);
19
- await mvDirs(__cache, __root, renderArtifacts.cacheables);
20
- }
21
- }
@@ -1,12 +0,0 @@
1
- import type { RenderContext } from "../../../shared/context";
2
- import type { SSG } from "../shared/types";
3
-
4
- import { gatsbyBuild } from "../shared/gatsby-build";
5
-
6
- export async function ssgAction(context: RenderContext<SSG>) {
7
- const {
8
- ssg: { assetPrefix },
9
- } = context;
10
-
11
- await gatsbyBuild(assetPrefix);
12
- }
@@ -1,65 +0,0 @@
1
- import type { RenderContext } from "../../../shared/context";
2
- import type { SSG } from "../shared/types";
3
-
4
- import fsp from "node:fs/promises";
5
- import path from "node:path";
6
-
7
- import { deleteDisposableSiteDirs, deleteEmptyDirectories, mvDirs } from "../../../core/fs";
8
- import { RENDER_MODE } from "../../../shared/types/render";
9
- import { extractAssetsFromDist } from "../shared/extract-assets";
10
- import { SyncRender } from "../shared/sync-render";
11
-
12
- export async function syncAction(context: RenderContext<SSG>) {
13
- const {
14
- renderMode,
15
- renderArtifacts,
16
- domain,
17
- pagesToCreate,
18
- pagesToDelete,
19
- pathsHydratedWithDomain: { __root, __ssg, __cache, __exports },
20
- ssg: { ssgArtifacts, assetPrefix },
21
- } = context;
22
-
23
- const needsAssetPrefix = !!assetPrefix && assetPrefix !== "";
24
- const currentDist = path.join(__root, "current-dist");
25
- const previousDist = path.join(__exports, "dist");
26
-
27
- // caching...
28
- await mvDirs(__root, __cache, renderArtifacts.cacheables, { override: true });
29
- await mvDirs(__ssg, __cache, ssgArtifacts.cacheables, { override: true });
30
-
31
- if (renderMode === RENDER_MODE.FROM_SCRATCH) {
32
- await deleteDisposableSiteDirs(currentDist);
33
- // Es render nuevo, así que el current-dist generado por gatsby hay que renombrarlo a dist
34
- // porque muchas de las acciones posteriores asumen ese nombre en ese path...
35
- // TODO: Cambiar eso y atomizar más las acciones.
36
- await fsp.rm(previousDist, { force: true, recursive: true });
37
- await fsp.rename(currentDist, previousDist);
38
- }
39
-
40
- if (renderMode === RENDER_MODE.INCREMENTAL) {
41
- await deleteDisposableSiteDirs(previousDist);
42
-
43
- const syncRender = new SyncRender({
44
- src: currentDist,
45
- dst: previousDist,
46
- pagesToCreate,
47
- pagesToDelete,
48
- artifactsToCopyToExports: ["build-report.json"],
49
- });
50
-
51
- await syncRender.execute();
52
- // después syncRender.execute() currentDist (que lo hizo gatsby) ya no es necesario
53
- // esta todo en __exports/dist porque syncRender.execute() ya sincroninizó.
54
- await fsp.rm(currentDist, { force: true, recursive: true });
55
- await deleteEmptyDirectories(path.join(__exports, "dist"));
56
- }
57
-
58
- if (needsAssetPrefix) {
59
- // TODO: Mejorar performance
60
- await extractAssetsFromDist(domain);
61
- }
62
-
63
- // rsync assets
64
- await mvDirs(__root, __exports, renderArtifacts.archivables, { override: true });
65
- }
@@ -1,114 +0,0 @@
1
- import type { SSG } from "./shared/types";
2
-
3
- import path from "node:path";
4
-
5
- import { readDB, writeDB } from "../../core/db";
6
- import { pathExists } from "../../core/fs";
7
- import { GriddoLog } from "../../core/GriddoLog";
8
- import { doLifeCycle } from "../../core/life-cycle";
9
- import { initializeLogFile } from "../../core/logger";
10
- import {
11
- getRenderMetadataFromDB,
12
- getRenderModeFromDB,
13
- getRenderPathsHydratedWithDomainFromDB,
14
- } from "../../services/render";
15
- import { getRenderArtifacts } from "../../services/render-artifacts";
16
- import { RenderContext } from "../../shared/context";
17
- import { GRIDDO_ASSET_PREFIX, GRIDDO_BUILD_LOGS } from "../../shared/envs";
18
- import { RENDER_MODE } from "../../shared/types/render";
19
- import { cleanAction } from "./actions/clean";
20
- import { closeAction } from "./actions/close";
21
- import { dataAction } from "./actions/data";
22
- import { healthCheckAction } from "./actions/healthCheck";
23
- import { initAction } from "./actions/init";
24
- import { logsAction } from "./actions/logs";
25
- import { metaAction } from "./actions/meta";
26
- import { prepareAction } from "./actions/prepare";
27
- import { relocationAction } from "./actions/relocation";
28
- import { restoreAction } from "./actions/restore";
29
- import { ssgAction } from "./actions/ssg";
30
- import { syncAction } from "./actions/sync";
31
- import { getGatsbyArtifacts } from "./shared/artifacts";
32
- import { disableRollbackOnError, enableRollbackOnError } from "./shared/render-rollback";
33
-
34
- const FILE_LOGS_ENABLED = GRIDDO_BUILD_LOGS; // && GRIDDO_BUILD_LOGS_TO_FILE;
35
-
36
- /**
37
- * Executes a complete Gatsby render process for a given domain.
38
- *
39
- * The render process consists of multiple lifecycle steps that handle cleaning,
40
- * preparing, building and syncing the site. It can run in two modes:
41
- * - FROM_SCRATCH: Performs a complete rebuild of the domains sites.
42
- * - INCREMENTAL: Only rebuilds changed pages while preserving the rest.
43
- */
44
- export async function gatsbyRenderDomain(domain: string) {
45
- // Init render log
46
- await initializeLogFile();
47
-
48
- // Render data
49
- const { renderMode, reason } = await getRenderModeFromDB(domain);
50
- const renderMetadata = await getRenderMetadataFromDB();
51
- const pathsHydratedWithDomain = await getRenderPathsHydratedWithDomainFromDB({ domain });
52
- const { __ssg } = pathsHydratedWithDomain;
53
-
54
- // Artifacts
55
- const renderArtifacts = await getRenderArtifacts(domain);
56
- const ssgArtifacts = await getGatsbyArtifacts();
57
-
58
- // SSG Gatsby assetPrefix
59
- const assetPrefix = GRIDDO_ASSET_PREFIX ? `${GRIDDO_ASSET_PREFIX}/${domain}` : "";
60
-
61
- // Previous render error management
62
- const domainSentinelFile = await pathExists(path.join(__ssg, `.render-sentinel-${domain}`));
63
- const derivedRenderMode = domainSentinelFile ? RENDER_MODE.FROM_SCRATCH : renderMode;
64
- const derivedRenderModeReason = domainSentinelFile ? "previous render error" : reason;
65
-
66
- const data = await readDB();
67
- data.domains[domain].renderMode = derivedRenderMode;
68
- data.domains[domain].renderModeReason = derivedRenderModeReason;
69
- data.domains[domain].isRendering = false;
70
-
71
- if (renderMode === RENDER_MODE.IDLE && derivedRenderMode === RENDER_MODE.IDLE) {
72
- GriddoLog.info(
73
- `(From Current Render) [${domain}]: Skipping start-render as it is marked as IDLE with the reason ${reason}.`,
74
- );
75
- return;
76
- }
77
-
78
- data.domains[domain].isRendering = true;
79
- data.currentRenderingDomain = domain;
80
- await writeDB(data);
81
-
82
- // Render mode reason to log information to the terminal
83
- const renderModeReason = derivedRenderModeReason ? ` <${derivedRenderModeReason}>` : "";
84
- GriddoLog.info(`Init render (${derivedRenderMode})${renderModeReason} for domain ${domain}\n`);
85
-
86
- // Render context
87
- const context = new RenderContext<SSG>({
88
- domain,
89
- pathsHydratedWithDomain,
90
- renderArtifacts,
91
- renderMetadata,
92
- renderMode: derivedRenderMode,
93
- ssg: { assetPrefix, ssgArtifacts },
94
- });
95
-
96
- // A las actions se les pasa siempre `context` y cada action ya utiliza lo que necesita.
97
- // Si una action necesita devolver algo para otra, se guarda en el context.
98
- // Ejemplo: el dataAction obtiene los ids de páginas para renderizar y
99
- // borrar y los guarda en context.pathsToRender y context.pathsToDelete.
100
- await doLifeCycle("Init", async () => initAction(context));
101
- await doLifeCycle("Clean", async () => cleanAction(context));
102
- await doLifeCycle("Prepare", async () => prepareAction(context));
103
- await doLifeCycle("Restore", async () => restoreAction(context));
104
- await enableRollbackOnError();
105
- await doLifeCycle("Data", async () => dataAction(context));
106
- await doLifeCycle("SSG", async () => ssgAction(context));
107
- await doLifeCycle("Relocation", async () => relocationAction(context));
108
- await doLifeCycle("Meta", async () => metaAction(context));
109
- await doLifeCycle("Sync", async () => syncAction(context));
110
- await doLifeCycle("HealthCheck", async () => healthCheckAction(context));
111
- await doLifeCycle("Logs", async () => logsAction(context), { skip: !FILE_LOGS_ENABLED ? "Build logs to file are disabled" : false }); // biome-ignore format: oneliner
112
- await doLifeCycle("Close", async () => closeAction(context));
113
- await disableRollbackOnError();
114
- }
@@ -1,17 +0,0 @@
1
- import path from "node:path";
2
-
3
- import { readDB } from "../../../core/db";
4
-
5
- export async function getGatsbyArtifacts() {
6
- const { ssg } = (await readDB()).paths;
7
-
8
- return {
9
- disposables: [
10
- //
11
- path.join(ssg, "public"),
12
- path.join(ssg, "static"),
13
- path.join(ssg, ".cache"),
14
- ],
15
- cacheables: [".cache"],
16
- };
17
- }
@@ -1,128 +0,0 @@
1
- import { createHash } from "node:crypto";
2
- import fsp from "node:fs/promises";
3
- import { join } from "node:path";
4
-
5
- import { GriddoLog } from "../../../core/GriddoLog";
6
-
7
- /**
8
- * Patrones de archivos de assets críticos para la comparación de builds.
9
- * Estos archivos son los que realmente afectan el webpackCompilationHash:
10
- * - app-*.js: Código principal de la aplicación
11
- * - framework-*.js: Framework de Gatsby/React
12
- * - webpack-runtime-*.js: Runtime de webpack
13
- *
14
- * Si estos archivos no cambian entre renders, el hash debería ser el mismo.
15
- */
16
- const _KEY_ASSET_PATTERNS = [/^app-.*\.js$/, /^framework-.*\.js$/, /^webpack-runtime-.*\.js$/];
17
-
18
- const KEY_ASSET_PATTERNS = [/\.js$/];
19
-
20
- /**
21
- * Calcula los hashes SHA256 del contenido de los assets clave en un directorio.
22
- * Solo procesa archivos que coincidan con KEY_ASSET_PATTERNS.
23
- *
24
- * @param dir La ruta al directorio (ej. './public')
25
- * @returns Un Map donde la clave es el nombre del fichero y el valor es su hash.
26
- * Si el directorio no existe o hay errores, retorna un Map vacío.
27
- */
28
- async function getAssetHashes(dir: string): Promise<Map<string, string>> {
29
- const assetHashes = new Map<string, string>();
30
-
31
- try {
32
- const allFiles = await fsp.readdir(dir);
33
- const keyAssetFiles = allFiles.filter((fileName) =>
34
- KEY_ASSET_PATTERNS.some((pattern) => pattern.test(fileName)),
35
- );
36
-
37
- for (const fileName of keyAssetFiles) {
38
- const filePath = join(dir, fileName);
39
- const fileContent = await fsp.readFile(filePath);
40
- const hash = createHash("sha256").update(fileContent).digest("hex");
41
- assetHashes.set(fileName, hash);
42
- }
43
-
44
- return assetHashes;
45
- } catch (error) {
46
- GriddoLog.build(`ERROR: Error processing directory ${dir}: ${error}`);
47
- // Si un directorio no existe (ej. el de producción la primera vez),
48
- // lo tratamos como si no tuviera assets.
49
- return assetHashes;
50
- }
51
- }
52
-
53
- /**
54
- * Compara los assets clave entre dos directorios de build de Gatsby.
55
- * Solo compara los archivos definidos en KEY_ASSET_PATTERNS.
56
- *
57
- * @param dir1 Ruta al primer directorio (ej. el de producción)
58
- * @param dir2 Ruta al segundo directorio (ej. el del nuevo build)
59
- * @returns `true` si hay diferencias en los assets clave, `false` si son idénticos.
60
- */
61
- export async function getAssetsDiffBetweenRenders(dir1: string, dir2: string): Promise<boolean> {
62
- const [hashes1, hashes2] = await Promise.all([getAssetHashes(dir1), getAssetHashes(dir2)]);
63
-
64
- // Si el número de assets clave es diferente, hay cambios.
65
- if (hashes1.size !== hashes2.size) {
66
- return true;
67
- }
68
-
69
- // Comparamos los hashes de cada fichero.
70
- for (const [fileName, hash1] of hashes1.entries()) {
71
- const hash2 = hashes2.get(fileName);
72
-
73
- // Si un fichero existe en el primero pero no en el segundo, hay cambios.
74
- if (!hash2) {
75
- return true;
76
- }
77
-
78
- // Si el contenido (hash) de un fichero ha cambiado.
79
- if (hash1 !== hash2) {
80
- return true;
81
- }
82
- }
83
-
84
- return false;
85
- }
86
-
87
- /**
88
- * Actualiza el webpackCompilationHash en un único fichero HTML.
89
- * @param filePath Ruta al fichero HTML.
90
- * @param newHash El nuevo hash a insertar.
91
- */
92
- export async function patchHtmlFile(filePath: string, newHash: string): Promise<void> {
93
- try {
94
- const content = await fsp.readFile(filePath, "utf-8");
95
-
96
- // Esta expresión regular captura tres grupos:
97
- // 1. La parte ANTES del hash (window.___webpackCompilationHash=")
98
- // 2. El hash ANTIGUO ([^"]*)
99
- // 3. La parte DESPUÉS del hash (";</script>)
100
- const regex = /(window\.___webpackCompilationHash=")([^"]*)(";<\/script>)/;
101
-
102
- // Solo reemplazamos el segundo grupo (el hash)
103
- const newContent = content.replace(regex, `$1${newHash}$3`);
104
-
105
- if (content === newContent) {
106
- // GriddoLog.warn(`WARN: No se encontró el hash en ${filePath}. El fichero no fue modificado.`);
107
- return;
108
- }
109
-
110
- await fsp.writeFile(filePath, newContent, "utf-8");
111
- } catch (error) {
112
- GriddoLog.error(`Failed to process file ${filePath}: ${error}`);
113
- }
114
- }
115
-
116
- // --- Ejemplo de uso ---
117
- // async function miScriptDeDeploy() {
118
- // const dirProduccion = '/ruta/a/produccion/public';
119
- // const dirNuevoBuild = './public';
120
-
121
- // const hayDiferencias = await getAssetsDiffBetweenRenders(dirProduccion, dirNuevoBuild);
122
-
123
- // if (hayDiferencias) {
124
- // // Lógica para el CAMINO A (cambio de código)
125
- // } else {
126
- // // Lógica para el CAMINO B (solo contenido)
127
- // }
128
- // }