@griddo/cx 11.9.17 → 11.10.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 (254) hide show
  1. package/README.md +13 -240
  2. package/build/commands/end-render.d.ts +0 -1
  3. package/build/commands/end-render.js +31 -0
  4. package/build/commands/end-render.js.map +7 -0
  5. package/build/commands/prepare-assets-directory.js +9 -0
  6. package/build/commands/prepare-assets-directory.js.map +7 -0
  7. package/build/commands/prepare-domains-render.js +40 -0
  8. package/build/commands/prepare-domains-render.js.map +7 -0
  9. package/build/commands/reset-render.d.ts +0 -1
  10. package/build/commands/reset-render.js +31 -0
  11. package/build/commands/reset-render.js.map +7 -0
  12. package/build/commands/single-domain-upload-search-content.d.ts +1 -0
  13. package/build/commands/start-render.d.ts +0 -1
  14. package/build/commands/start-render.js +66 -0
  15. package/build/commands/start-render.js.map +7 -0
  16. package/build/commands/upload-search-content.d.ts +0 -1
  17. package/build/commands/upload-search-content.js +32 -0
  18. package/build/commands/upload-search-content.js.map +7 -0
  19. package/build/core/GriddoLog.d.ts +16 -0
  20. package/build/{utils/health-checks.d.ts → core/check-env-health.d.ts} +4 -2
  21. package/build/core/db-class.d.ts +11 -0
  22. package/build/core/db.d.ts +4 -0
  23. package/build/core/dist-rollback.d.ts +11 -0
  24. package/build/core/errors.d.ts +26 -0
  25. package/build/core/fs.d.ts +69 -0
  26. package/build/core/life-cycle.d.ts +26 -0
  27. package/build/core/logger.d.ts +18 -0
  28. package/build/core/objects.d.ts +11 -0
  29. package/build/core/print-logos.d.ts +5 -0
  30. package/build/index.d.ts +10 -29
  31. package/build/index.js +404 -73
  32. package/build/react/DynamicScript/index.d.ts +4 -0
  33. package/build/react/GriddoFavicon/index.d.ts +4 -0
  34. package/build/react/GriddoIntegrations/index.d.ts +3 -4
  35. package/build/react/GriddoIntegrations/utils.d.ts +7 -6
  36. package/build/react/GriddoOpenGraph/index.d.ts +10 -0
  37. package/build/react/index.d.ts +3 -2
  38. package/build/react/index.js +1 -3
  39. package/build/{utils → services}/api.d.ts +1 -1
  40. package/build/services/auth.d.ts +2 -5
  41. package/build/services/domains.d.ts +3 -4
  42. package/build/services/manage-sites.d.ts +22 -0
  43. package/build/services/manage-store.d.ts +32 -0
  44. package/build/services/navigation.d.ts +16 -16
  45. package/build/{utils → services}/pages.d.ts +3 -3
  46. package/build/services/reference-fields.d.ts +3 -3
  47. package/build/services/render-artifacts.d.ts +6 -0
  48. package/build/services/render.d.ts +70 -0
  49. package/build/services/robots.d.ts +2 -19
  50. package/build/services/sitemaps.d.ts +5 -0
  51. package/build/services/sites.d.ts +8 -5
  52. package/build/services/store.d.ts +10 -1
  53. package/build/shared/context.d.ts +36 -0
  54. package/build/shared/envs.d.ts +17 -0
  55. package/build/{errors/errors-data.d.ts → shared/errors.d.ts} +5 -3
  56. package/build/shared/npm-modules/brush.d.ts +18 -0
  57. package/build/shared/npm-modules/find-up-simple.d.ts +34 -0
  58. package/build/shared/npm-modules/pkg-dir.d.ts +7 -0
  59. package/build/shared/npm-modules/xml-parser.d.ts +4 -0
  60. package/build/{types → shared/types}/api.d.ts +18 -18
  61. package/build/{types → shared/types}/global.d.ts +15 -16
  62. package/build/{types → shared/types}/navigation.d.ts +5 -5
  63. package/build/{types → shared/types}/pages.d.ts +9 -9
  64. package/build/shared/types/render.d.ts +56 -0
  65. package/build/{types → shared/types}/sites.d.ts +18 -19
  66. package/build/shared/types.d.ts +15 -0
  67. package/build/ssg-adapters/gatsby/actions/clean.d.ts +3 -0
  68. package/build/ssg-adapters/gatsby/actions/close.d.ts +3 -0
  69. package/build/ssg-adapters/gatsby/actions/data.d.ts +2 -0
  70. package/build/ssg-adapters/gatsby/actions/healthCheck.d.ts +2 -0
  71. package/build/ssg-adapters/gatsby/actions/init.d.ts +2 -0
  72. package/build/ssg-adapters/gatsby/actions/logs.d.ts +3 -0
  73. package/build/ssg-adapters/gatsby/actions/meta.d.ts +2 -0
  74. package/build/ssg-adapters/gatsby/actions/prepare.d.ts +2 -0
  75. package/build/ssg-adapters/gatsby/actions/relocation.d.ts +2 -0
  76. package/build/ssg-adapters/gatsby/actions/restore.d.ts +3 -0
  77. package/build/ssg-adapters/gatsby/actions/ssg.d.ts +3 -0
  78. package/build/ssg-adapters/gatsby/actions/sync.d.ts +3 -0
  79. package/build/ssg-adapters/gatsby/index.d.ts +9 -0
  80. package/build/ssg-adapters/gatsby/shared/artifacts.d.ts +4 -0
  81. package/build/ssg-adapters/gatsby/shared/diff-assets.d.ts +15 -0
  82. package/build/ssg-adapters/gatsby/shared/extract-assets.d.ts +7 -0
  83. package/build/ssg-adapters/gatsby/shared/gatsby-build.d.ts +7 -0
  84. package/build/ssg-adapters/gatsby/shared/render-rollback.d.ts +18 -0
  85. package/build/ssg-adapters/gatsby/shared/sync-render.d.ts +26 -0
  86. package/build/ssg-adapters/gatsby/shared/types.d.ts +34 -0
  87. package/cli.mjs +231 -0
  88. package/exporter/build-esbuild.noop +42 -0
  89. package/exporter/build.sh +16 -24
  90. package/exporter/commands/README.md +142 -0
  91. package/exporter/commands/end-render.ts +53 -87
  92. package/exporter/commands/prepare-assets-directory.ts +35 -0
  93. package/exporter/commands/prepare-domains-render.ts +150 -33
  94. package/exporter/commands/reset-render.ts +13 -8
  95. package/exporter/commands/single-domain-upload-search-content.ts +206 -0
  96. package/exporter/commands/start-render.ts +14 -65
  97. package/exporter/commands/upload-search-content.ts +204 -26
  98. package/exporter/core/GriddoLog.ts +45 -0
  99. package/exporter/core/check-env-health.ts +203 -0
  100. package/exporter/core/db-class.ts +54 -0
  101. package/exporter/core/db.ts +33 -0
  102. package/exporter/core/dist-rollback.ts +49 -0
  103. package/exporter/core/errors.ts +93 -0
  104. package/exporter/core/fs.ts +385 -0
  105. package/exporter/{utils → core}/images.ts +1 -6
  106. package/exporter/{utils → core}/instance.ts +9 -13
  107. package/exporter/core/life-cycle.ts +73 -0
  108. package/exporter/core/logger.ts +137 -0
  109. package/exporter/core/objects.ts +37 -0
  110. package/exporter/core/print-logos.ts +21 -0
  111. package/exporter/index.ts +14 -56
  112. package/exporter/react/DynamicScript/index.tsx +33 -0
  113. package/exporter/react/{Favicon → GriddoFavicon}/index.tsx +3 -9
  114. package/exporter/react/GriddoIntegrations/index.tsx +17 -23
  115. package/exporter/react/GriddoIntegrations/utils.ts +24 -12
  116. package/exporter/react/GriddoOpenGraph/index.tsx +39 -0
  117. package/exporter/react/index.tsx +3 -9
  118. package/exporter/services/api.ts +306 -0
  119. package/exporter/services/auth.ts +8 -10
  120. package/exporter/services/domains.ts +23 -8
  121. package/exporter/services/manage-sites.ts +116 -0
  122. package/exporter/services/manage-store.ts +173 -0
  123. package/exporter/services/navigation.ts +12 -18
  124. package/exporter/{utils → services}/pages.ts +27 -92
  125. package/exporter/services/reference-fields.ts +14 -32
  126. package/exporter/services/render-artifacts.ts +44 -0
  127. package/exporter/services/render.ts +229 -0
  128. package/exporter/services/robots.ts +33 -61
  129. package/exporter/services/sitemaps.ts +129 -0
  130. package/exporter/services/sites.ts +40 -28
  131. package/exporter/services/store.ts +354 -321
  132. package/exporter/shared/context.ts +49 -0
  133. package/exporter/{constants → shared}/endpoints.ts +12 -11
  134. package/exporter/shared/envs.ts +58 -0
  135. package/exporter/{errors/errors-data.ts → shared/errors.ts} +24 -14
  136. package/exporter/shared/npm-modules/README.md +36 -0
  137. package/exporter/shared/npm-modules/brush.ts +34 -0
  138. package/exporter/shared/npm-modules/find-up-simple.ts +100 -0
  139. package/exporter/shared/npm-modules/pkg-dir.ts +17 -0
  140. package/exporter/shared/npm-modules/xml-parser.ts +57 -0
  141. package/exporter/{types → shared/types}/api.ts +40 -41
  142. package/exporter/{types → shared/types}/global.ts +17 -21
  143. package/exporter/{types → shared/types}/navigation.ts +3 -3
  144. package/exporter/{types → shared/types}/pages.ts +10 -11
  145. package/exporter/shared/types/render.ts +65 -0
  146. package/exporter/{types → shared/types}/sites.ts +18 -19
  147. package/exporter/shared/types.ts +15 -0
  148. package/exporter/ssg-adapters/gatsby/actions/clean.ts +26 -0
  149. package/exporter/ssg-adapters/gatsby/actions/close.ts +17 -0
  150. package/exporter/ssg-adapters/gatsby/actions/data.ts +22 -0
  151. package/exporter/ssg-adapters/gatsby/actions/healthCheck.ts +10 -0
  152. package/exporter/ssg-adapters/gatsby/actions/init.ts +12 -0
  153. package/exporter/ssg-adapters/gatsby/actions/logs.ts +10 -0
  154. package/exporter/ssg-adapters/gatsby/actions/meta.ts +13 -0
  155. package/exporter/ssg-adapters/gatsby/actions/prepare.ts +9 -0
  156. package/exporter/ssg-adapters/gatsby/actions/relocation.ts +15 -0
  157. package/exporter/ssg-adapters/gatsby/actions/restore.ts +21 -0
  158. package/exporter/ssg-adapters/gatsby/actions/ssg.ts +12 -0
  159. package/exporter/ssg-adapters/gatsby/actions/sync.ts +65 -0
  160. package/exporter/ssg-adapters/gatsby/index.ts +117 -0
  161. package/exporter/ssg-adapters/gatsby/shared/artifacts.ts +17 -0
  162. package/exporter/ssg-adapters/gatsby/shared/diff-assets.ts +128 -0
  163. package/exporter/ssg-adapters/gatsby/shared/extract-assets.ts +75 -0
  164. package/exporter/ssg-adapters/gatsby/shared/gatsby-build.ts +58 -0
  165. package/exporter/ssg-adapters/gatsby/shared/render-rollback.ts +33 -0
  166. package/exporter/ssg-adapters/gatsby/shared/sync-render.ts +298 -0
  167. package/exporter/ssg-adapters/gatsby/shared/types.ts +35 -0
  168. package/gatsby-browser.tsx +41 -58
  169. package/gatsby-config.ts +10 -17
  170. package/gatsby-node.ts +20 -79
  171. package/gatsby-ssr.tsx +2 -1
  172. package/package.json +41 -78
  173. package/plugins/gatsby-plugin-svgr-loader/gatsby-node.js +55 -0
  174. package/plugins/gatsby-plugin-svgr-loader/package.json +8 -0
  175. package/src/components/Head.tsx +28 -73
  176. package/src/components/template.tsx +6 -29
  177. package/src/gatsby-node-utils.ts +81 -2
  178. package/src/html.tsx +2 -11
  179. package/src/types.ts +3 -3
  180. package/tsconfig.commands.json +36 -0
  181. package/tsconfig.exporter.json +21 -0
  182. package/tsconfig.json +5 -3
  183. package/build/adapters/gatsby/index.d.ts +0 -4
  184. package/build/adapters/gatsby/utils.d.ts +0 -26
  185. package/build/artifacts/index.d.ts +0 -6
  186. package/build/constants/envs.d.ts +0 -37
  187. package/build/constants/index.d.ts +0 -57
  188. package/build/end-render.js +0 -74
  189. package/build/end-render.js.map +0 -7
  190. package/build/errors/index.d.ts +0 -15
  191. package/build/index.js.map +0 -7
  192. package/build/prepare-domains-render.js +0 -73
  193. package/build/prepare-domains-render.js.map +0 -7
  194. package/build/react/Favicon/index.d.ts +0 -5
  195. package/build/registers/api.d.ts +0 -9
  196. package/build/registers/gatsby.d.ts +0 -9
  197. package/build/registers/index.d.ts +0 -3
  198. package/build/reset-render.js +0 -74
  199. package/build/reset-render.js.map +0 -7
  200. package/build/services/register.d.ts +0 -36
  201. package/build/services/settings.d.ts +0 -4
  202. package/build/start-render.js +0 -100
  203. package/build/start-render.js.map +0 -7
  204. package/build/upload-search-content.js +0 -74
  205. package/build/upload-search-content.js.map +0 -7
  206. package/build/utils/alerts.d.ts +0 -3
  207. package/build/utils/cache.d.ts +0 -35
  208. package/build/utils/core-utils.d.ts +0 -107
  209. package/build/utils/create-build-data.d.ts +0 -8
  210. package/build/utils/domains.d.ts +0 -13
  211. package/build/utils/folders.d.ts +0 -53
  212. package/build/utils/loggin.d.ts +0 -51
  213. package/build/utils/render.d.ts +0 -13
  214. package/build/utils/searches.d.ts +0 -15
  215. package/build/utils/sites.d.ts +0 -31
  216. package/build/utils/store.d.ts +0 -81
  217. package/cx.config.d.ts +0 -5
  218. package/cx.config.js +0 -36
  219. package/exporter/adapters/gatsby/index.ts +0 -182
  220. package/exporter/adapters/gatsby/utils.ts +0 -186
  221. package/exporter/artifacts/README.md +0 -34
  222. package/exporter/artifacts/index.ts +0 -33
  223. package/exporter/commands/move-assets.ts +0 -11
  224. package/exporter/constants/envs.ts +0 -94
  225. package/exporter/constants/index.ts +0 -129
  226. package/exporter/errors/index.ts +0 -40
  227. package/exporter/registers/api.ts +0 -14
  228. package/exporter/registers/gatsby.ts +0 -14
  229. package/exporter/registers/index.ts +0 -4
  230. package/exporter/services/register.ts +0 -113
  231. package/exporter/services/settings.ts +0 -17
  232. package/exporter/utils/alerts.ts +0 -29
  233. package/exporter/utils/api.ts +0 -243
  234. package/exporter/utils/cache.ts +0 -142
  235. package/exporter/utils/core-utils.ts +0 -458
  236. package/exporter/utils/create-build-data.ts +0 -17
  237. package/exporter/utils/domains.ts +0 -39
  238. package/exporter/utils/folders.ts +0 -320
  239. package/exporter/utils/health-checks.ts +0 -64
  240. package/exporter/utils/loggin.ts +0 -184
  241. package/exporter/utils/render.ts +0 -71
  242. package/exporter/utils/searches.ts +0 -156
  243. package/exporter/utils/sites.ts +0 -312
  244. package/exporter/utils/store.ts +0 -314
  245. package/src/README.md +0 -7
  246. package/start-render.js +0 -7
  247. /package/build/commands/{move-assets.d.ts → prepare-assets-directory.d.ts} +0 -0
  248. /package/build/{utils → core}/images.d.ts +0 -0
  249. /package/build/{utils → core}/instance.d.ts +0 -0
  250. /package/build/react/{Favicon → GriddoFavicon}/utils.d.ts +0 -0
  251. /package/build/{constants → shared}/endpoints.d.ts +0 -0
  252. /package/build/{types → shared/types}/templates.d.ts +0 -0
  253. /package/exporter/react/{Favicon → GriddoFavicon}/utils.ts +0 -0
  254. /package/exporter/{types → shared/types}/templates.ts +0 -0
@@ -1,6 +1,6 @@
1
+ import type { Core, Fields } from "@griddo/core";
1
2
  import type { EndSiteRenderBody } from "./api";
2
3
  import type { Site } from "./sites";
3
- import type { Core, Fields } from "@griddo/core";
4
4
 
5
5
  interface Settings {
6
6
  apiVersion?: string;
@@ -55,24 +55,22 @@ type Domain = {
55
55
  url: string;
56
56
  };
57
57
 
58
- type Domains = Array<Domain>;
58
+ type Domains = Domain[];
59
59
 
60
60
  /** Describes the type of build process data object. */
61
61
  type BuildProcessData = Record<string, EndSiteRenderBody>;
62
62
 
63
63
  type Robot = { path: string; content: string };
64
64
 
65
- type Robots = Array<Robot>;
65
+ type Robots = Robot[];
66
66
 
67
67
  interface RenderInfo {
68
68
  buildProcessData: BuildProcessData;
69
- createdPages: Array<number>;
70
- sitesToPublish: Array<Site>;
69
+ createdPages: number[];
70
+ sitesToPublish: Site[];
71
71
  }
72
72
 
73
- type LifeCycleSteps = Array<
74
- (...args: Array<unknown>) => unknown | Promise<unknown>
75
- >;
73
+ type LifeCycleAction = (...args: unknown[]) => void | Promise<void>;
76
74
 
77
75
  type LifeCyclesNames =
78
76
  | "Init"
@@ -82,12 +80,11 @@ type LifeCyclesNames =
82
80
  | "SSG"
83
81
  | "Relocation"
84
82
  | "Meta"
85
- | "Archive"
83
+ | "Sync"
86
84
  | "Clean"
87
85
  | "Close"
88
86
  | "HealthCheck"
89
- | "Close"
90
- | "__DEBUG__";
87
+ | "Close";
91
88
 
92
89
  type PlaceholderPath =
93
90
  | "__exports"
@@ -97,13 +94,11 @@ type PlaceholderPath =
97
94
  | "__components"
98
95
  | "__root"
99
96
  | "__exports_dist"
100
- | "__cx_dist";
97
+ | "__sites";
101
98
 
102
99
  interface CXConfig {
103
- proDomain: string;
104
100
  griddoVersion: string;
105
101
  buildReportFileName: string;
106
- paths: (domain?: string) => Record<PlaceholderPath, string>;
107
102
  }
108
103
 
109
104
  interface AIEmbeddingsResponse {
@@ -111,16 +106,17 @@ interface AIEmbeddingsResponse {
111
106
  message: string;
112
107
  }
113
108
 
114
- interface Artifacts {
115
- disposables: Array<string>;
116
- cacheables: Array<string>;
117
- initials: Array<string>;
118
- archivables: Array<string>;
109
+ interface RenderArtifacts {
110
+ disposables: string[];
111
+ cacheables: string[];
112
+ initials: string[];
113
+ archivables: string[];
114
+ restaurable: string[];
119
115
  }
120
116
 
121
117
  export type {
122
118
  AIEmbeddingsResponse,
123
- Artifacts,
119
+ RenderArtifacts,
124
120
  BuildProcessData,
125
121
  CXConfig,
126
122
  Domain,
@@ -134,5 +130,5 @@ export type {
134
130
  Robot,
135
131
  Robots,
136
132
  Settings,
137
- LifeCycleSteps,
133
+ LifeCycleAction,
138
134
  };
@@ -4,7 +4,7 @@ export type Header = {
4
4
  id: number;
5
5
  isDefault: boolean;
6
6
  language: number;
7
- navigationLanguages: Array<{ navigationId: number }>;
7
+ navigationLanguages: { navigationId: number }[];
8
8
  setAsDefault: boolean;
9
9
  theme: null | string;
10
10
  title: string;
@@ -17,9 +17,9 @@ export type Footer = {
17
17
  id: number;
18
18
  isDefault: boolean;
19
19
  language: number;
20
- navigationLanguages: Array<{ navigationId: number }>;
20
+ navigationLanguages: { navigationId: number }[];
21
21
  setAsDefault: boolean;
22
22
  theme: null | string;
23
23
  title: string;
24
- type: "header";
24
+ type: "footer";
25
25
  };
@@ -1,7 +1,7 @@
1
+ import type { Core, Fields } from "@griddo/core";
1
2
  import type { SocialsResponse } from "./api";
2
3
  import type { Settings } from "./global";
3
4
  import type { Site } from "./sites";
4
- import type { Core, Fields } from "@griddo/core";
5
5
 
6
6
  // TODO: In @griddo/core the type Core.Page has header/footer as React-Types,
7
7
  // but API return `number | null`.
@@ -35,7 +35,7 @@ export type GriddoSinglePage = Core.Page & {
35
35
 
36
36
  export type GriddoListPage = Core.Page & {
37
37
  page: APIPageObject;
38
- pages: Array<Array<Fields.QueriedDataItem>>;
38
+ pages: Fields.QueriedDataItem[][];
39
39
  isRoot?: boolean;
40
40
  defaultLang?: Core.SiteLanguage;
41
41
  template: {
@@ -45,7 +45,7 @@ export type GriddoListPage = Core.Page & {
45
45
  activeSectionSlug: string;
46
46
  activeSectionBase: string;
47
47
  };
48
- totalQueriedItems: Array<Fields.QueriedDataItem>;
48
+ totalQueriedItems: Fields.QueriedDataItem[];
49
49
  };
50
50
 
51
51
  export type GriddoMultiPage = Core.Page & {
@@ -62,7 +62,7 @@ export interface AdditionalInfo {
62
62
  griddoVersion: string;
63
63
  instance?: string;
64
64
  publicBaseUrl: string;
65
- siteLangs: Array<Core.SiteLanguage>;
65
+ siteLangs: Core.SiteLanguage[];
66
66
  siteMetadata: Site["siteMetadata"];
67
67
  siteSlug: string;
68
68
  socials: SocialsResponse;
@@ -90,14 +90,14 @@ export interface PageAdditionalInfo extends AdditionalInfo {
90
90
  export type MultiPageElement = {
91
91
  component: string;
92
92
  title: string | Required<Fields.Heading>;
93
- elements: Array<Record<string, unknown>>;
94
- componentModules: Array<Record<string, unknown>>;
93
+ elements: Record<string, unknown>[];
94
+ componentModules: Record<string, unknown>[];
95
95
  sectionSlug: string;
96
96
  metaTitle: string;
97
97
  metaDescription: string;
98
98
  };
99
99
 
100
- export type MultiPageElements = Array<MultiPageElement>;
100
+ export type MultiPageElements = MultiPageElement[];
101
101
 
102
102
  /**
103
103
  * Gatsby page object format.
@@ -140,7 +140,7 @@ export type GriddoPageObject = {
140
140
  siteMetadata: Site["siteMetadata"];
141
141
  theme: string;
142
142
  title: string;
143
- siteLangs: Array<Core.SiteLanguage>;
143
+ siteLangs: Core.SiteLanguage[];
144
144
  siteOptions: AdditionalInfo["siteOptions"];
145
145
  siteScript: string;
146
146
  socials: SocialsResponse;
@@ -153,11 +153,10 @@ export interface Dimensions {
153
153
  values: Record<string, string> | null;
154
154
  contentSelect?: "group" | "individual" | null;
155
155
  groupSelect?: string;
156
- dimensionsSelect?: Array<string>;
156
+ dimensionsSelect?: string[];
157
157
  }
158
158
 
159
- export interface GatsbyPageTemplateProps
160
- extends Omit<GriddoPageObject, "context"> {
159
+ export interface GatsbyPageTemplateProps extends Omit<GriddoPageObject, "context"> {
161
160
  pageContext: GriddoPageObject["context"] & {
162
161
  page: Core.Page;
163
162
  };
@@ -0,0 +1,65 @@
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
+ commitHash: string;
27
+ commitMessage: string;
28
+ paths: {
29
+ root: string;
30
+ cx: string;
31
+ ssg: string;
32
+ cxCache: string;
33
+ components: string;
34
+ exportsDir: string;
35
+ exportsDirBackup: string;
36
+ };
37
+ domains: {
38
+ [key: DomainLike]: {
39
+ renderMode?: RenderMode;
40
+ shouldBeRendered?: boolean;
41
+ isRendering?: boolean;
42
+ renderInfo?: RenderInfo;
43
+ renderModeReason?: string;
44
+ };
45
+ };
46
+ };
47
+
48
+ interface Report {
49
+ authControl:
50
+ | {
51
+ Authorization: string;
52
+ "Cache-Control": string;
53
+ lang?: string | undefined;
54
+ }
55
+ | undefined;
56
+ sites: {
57
+ siteId: number;
58
+ publishHashes: string[];
59
+ siteHash: string | null;
60
+ unpublishHashes: string[];
61
+ publishPagesIds: number[];
62
+ }[];
63
+ }
64
+
65
+ export { RENDER_MODE, type RenderDB, type RenderMode, type Report };
@@ -1,6 +1,6 @@
1
+ import type { Core } from "@griddo/core";
1
2
  import type { SocialsResponse } from "./api";
2
3
  import type { Footer, Header } from "./navigation";
3
- import type { Core } from "@griddo/core";
4
4
 
5
5
  /**
6
6
  * Describes a Griddo site object from API.
@@ -28,12 +28,12 @@ export interface Site
28
28
  > {
29
29
  author: string;
30
30
  deleted: number;
31
- domains: Array<Record<string, string>>;
32
- footers: Array<Footer>;
31
+ domains: Record<string, string>[];
32
+ footers: Footer[];
33
33
  hash: string | null;
34
- headers: Array<Header>;
35
- languages: Array<Core.SiteLanguage>; // in Core is Array<number>
36
- languageSites: Array<number>;
34
+ headers: Header[];
35
+ languages: Core.SiteLanguage[]; // in Core is number[]
36
+ languageSites: number[];
37
37
  navigationModules: { header?: string; footer?: string } | null;
38
38
  /**
39
39
  * Array of all pages (from day 0): published, unpublished and deleted
@@ -41,9 +41,8 @@ export interface Site
41
41
  * `select/site/33/pages` -> [{id,label}, {id,label}, {id,label}] // array of published, pending, unpublished... page objects
42
42
  * `select/site/33/pages?liveStatus=active` -> // array of publishedpage objects
43
43
  */
44
- pages: Array<number>;
45
- onlinePages: Array<number>;
46
- changedPages: Array<number>;
44
+ pages: number[];
45
+ onlinePages: number[];
47
46
  published: string;
48
47
  rendering: boolean;
49
48
  renderingHours: number;
@@ -52,23 +51,23 @@ export interface Site
52
51
  smallAvatar: string;
53
52
  updated: boolean;
54
53
  pagesStatus: {
55
- active: Array<number>;
56
- uploadPending: Array<number>;
57
- offlinePending: Array<number>;
58
- offline: Array<number>;
59
- deleted: Array<number>;
54
+ active: number[];
55
+ uploadPending: number[];
56
+ offlinePending: number[];
57
+ offline: number[];
58
+ deleted: number[];
60
59
  };
61
60
  }
62
61
 
63
62
  export interface SiteData {
64
63
  siteInfo: Site;
65
- validPagesIds: Array<number>;
64
+ validPagesIds: number[];
66
65
  siteHash: string | null;
67
- unpublishHashes: Array<string>;
68
- siteLangs: Array<Core.SiteLanguage>;
66
+ unpublishHashes: string[];
67
+ siteLangs: Core.SiteLanguage[];
69
68
  defaultLang: Core.SiteLanguage | undefined;
70
- headers: Array<Header>;
71
- footers: Array<Footer>;
69
+ headers: Header[];
70
+ footers: Footer[];
72
71
  socials: SocialsResponse;
73
72
  }
74
73
 
@@ -0,0 +1,15 @@
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 };
@@ -0,0 +1,26 @@
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
+ }
@@ -0,0 +1,17 @@
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
+ }
@@ -0,0 +1,22 @@
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
+ }
@@ -0,0 +1,10 @@
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
+ }
@@ -0,0 +1,12 @@
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
+ }
@@ -0,0 +1,10 @@
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
+ }
@@ -0,0 +1,13 @@
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
+ }
@@ -0,0 +1,9 @@
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
+ }
@@ -0,0 +1,15 @@
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
+ }
@@ -0,0 +1,21 @@
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
+ }
@@ -0,0 +1,12 @@
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
+ }
@@ -0,0 +1,65 @@
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
+ }