@griddo/cx 11.7.10 → 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
@@ -3,99 +3,27 @@ import type { RenderInfo } from "../types/global";
3
3
  import type { GriddoPageObject } from "../types/pages";
4
4
  import type { Site } from "../types/sites";
5
5
 
6
- import fs from "node:fs";
6
+ import fsp from "node:fs/promises";
7
7
  import path from "node:path";
8
8
 
9
- import fsx from "fs-extra";
10
-
11
- import { throwError } from "../errors";
12
- import { getConfig, removeProperties, walk, walkStore } from "./core-utils";
9
+ import { WriteToStoreError } from "../constants/errors";
10
+ import { readDB, writeDB } from "../services/db";
11
+ import { removeProperties } from "./core-utils";
12
+ import { throwError } from "./errors";
13
+ import { pathExists } from "./folders";
13
14
  import { verboseLog } from "./loggin";
14
- import { ReadFromStoreError, WriteToStoreError } from "../errors/errors-data";
15
-
16
- const config = getConfig();
17
-
18
- /**
19
- * Read all path pages stored in the `store` Griddo directory and returns the
20
- * absolute file path.
21
- *
22
- * @param domain - The domain to get the pages from.
23
- */
24
- function getBuildPagesFromCachedStore<PageType extends GriddoPageObject>(
25
- domain: string,
26
- ) {
27
- const { __cache } = config.paths(domain);
28
- return getBuildPagesFromStore<PageType>({
29
- basePath: path.join(__cache, "store"),
30
- withSizeProp: false,
31
- });
32
- }
15
+ import { getRenderPathsFromDB } from "./render";
33
16
 
34
17
  /**
35
- * Read all pages stored in the `store` Griddo directory and returns one by one
36
- * with a generator.
37
- *
38
- * @param basePath - Base directory to get pages from.
39
- * @param options.withSizeProp - Add size prop to the page object.
40
- * @todo throw error if the basePath is not an store folder
18
+ * Get the build metadata from the Store.
41
19
  */
42
- function* getBuildPagesFromStore<PageType extends GriddoPageObject>(args?: {
43
- basePath?: string;
44
- withSizeProp?: boolean;
45
- }) {
46
- const { basePath, withSizeProp } = args || {};
47
- const { __cx } = config.paths();
48
- const pagesDirPath = basePath || path.join(__cx, "store");
49
-
50
- const jsonFilePaths = walkStore(pagesDirPath).filter(
51
- (file) => path.extname(file) === ".json",
52
- );
53
-
54
- for (const filePath of jsonFilePaths) {
55
- try {
56
- const page = fsx.readJsonSync(filePath, {
57
- encoding: "utf-8",
58
- }) as PageType;
59
-
60
- if (withSizeProp) {
61
- const fileStats = fs.statSync(filePath);
62
- page.size = fileStats.size / 1024;
63
- }
20
+ async function getBuildMetadata(domain: string): Promise<BuildMetaData> {
21
+ const db = await readDB();
22
+ const { sitesToPublish, createdPages, buildProcessData } = db.domains[domain].renderInfo || {};
64
23
 
65
- // SECURITY: Only returns valid page objects
66
- if (page.path) {
67
- yield page;
68
- }
69
- } catch (error) {
70
- throwError(ReadFromStoreError, error);
71
- }
24
+ if (!sitesToPublish || !createdPages || !buildProcessData) {
25
+ throw new Error("Build metadata not found");
72
26
  }
73
- }
74
-
75
- /**
76
- * Read all pages stored in `store` Griddo directory and return the absolute
77
- * path.
78
- */
79
- function getBuildPagesPath() {
80
- const config = getConfig();
81
- const { __cx } = config.paths();
82
-
83
- const PAGES_DIR = path.join(__cx, "store");
84
- const PAGE_FILES = walk(PAGES_DIR).filter(
85
- (file) => path.extname(file) === ".json",
86
- );
87
-
88
- return PAGE_FILES;
89
- }
90
-
91
- /**
92
- * Get the build metadata from the Store.
93
- */
94
- async function getBuildMetadata(): Promise<BuildMetaData> {
95
- const { __cx } = config.paths();
96
- const { sitesToPublish, createdPages, buildProcessData } = fsx.readJSONSync(
97
- path.join(__cx, "render-metadata.json"),
98
- );
99
27
 
100
28
  return {
101
29
  buildProcessData,
@@ -108,13 +36,11 @@ async function getBuildMetadata(): Promise<BuildMetaData> {
108
36
  * Write render info into a file.
109
37
  * @param renderInfo - Data that will be saved related to the render process.
110
38
  */
111
- function saveRenderInfoInStore(renderInfo: RenderInfo) {
112
- const { __cx } = config.paths();
113
-
114
- fs.writeFileSync(
115
- path.join(__cx, "render-metadata.json"),
116
- JSON.stringify(renderInfo),
117
- );
39
+ async function saveRenderInfoInStore(renderInfo: RenderInfo, domain: string) {
40
+ const db = await readDB();
41
+ db.domains[domain] = db.domains[domain] || {};
42
+ db.domains[domain].renderInfo = renderInfo;
43
+ await writeDB(db);
118
44
  }
119
45
 
120
46
  /**
@@ -133,59 +59,49 @@ function saveRenderInfoInStore(renderInfo: RenderInfo) {
133
59
  // }
134
60
 
135
61
  /**
136
- * Return an array of ids only from `.json` files (no dirs) in the `basePath` dir based in the file name.
62
+ * Return an array of paths only from `.json` files (no dirs) in the `basePath` dir based in the file name.
137
63
  * @param basePath - Absolute path of the dir from which files will be read.
138
64
  * @returns A Array<number> of pages ids in `basePath` dir.
139
65
  */
140
- function getPageInStoreDir(basePath: string): Array<number> {
141
- const filesInStore = fs.readdirSync(basePath);
66
+ async function getPageInStoreDir(basePath: string) {
67
+ const filesInStore = await fsp.readdir(basePath);
68
+
69
+ return filesInStore
70
+ .filter(async (file) => {
71
+ const fullPathFile = `${basePath}/${file}`;
72
+ const stat = await fsp.stat(fullPathFile);
73
+ // Si es un directorio, no lo incluimos.
74
+ if (stat?.isDirectory()) {
75
+ return false;
76
+ }
142
77
 
143
- return (
144
- filesInStore
145
- .filter((file) => {
146
- const fullPathFile = `${basePath}/${file}`;
147
- const stat = fs.statSync(fullPathFile);
148
- // Si es un directorio, no lo incluimos.
149
- if (stat?.isDirectory()) {
150
- return false;
151
- }
152
- // Si es un archivo pero no tiene la extensión `.json`, no lo incluimos
153
- if (path.extname(file) !== ".json") {
154
- return false;
155
- }
156
- // Si es un archivo con el nombre NO pasable a número (NaN), no lo incluimos.
157
- const baseFilename = path.basename(file, path.extname(file));
158
- if (Number.isNaN(Number.parseInt(baseFilename))) {
159
- return false;
160
- }
78
+ // Si es un archivo pero no tiene la extensión `.json`, no lo incluimos
79
+ if (path.extname(file) !== ".json") {
80
+ return false;
81
+ }
161
82
 
162
- // no es dir, es json y con nombre pasable a número, ok :)
163
- return true;
164
- })
165
- // Tenemos solo jsons donde el nombre es un "número": "21345.json"
166
- .map((page) => {
167
- const filename = path.basename(page, path.extname(page));
168
- return Number.parseInt(filename);
169
- })
170
- );
83
+ // no es dir, es json.
84
+ return true;
85
+ })
86
+ .map((page) => {
87
+ return path.join(basePath, page);
88
+ });
171
89
  }
172
90
 
173
91
  /**
174
92
  * Save the pages into the file system.
175
93
  * @param pages - An array of Griddo page objects to be saved.
176
94
  */
177
- function saveSitePagesInStore(
178
- siteDirName: string,
179
- pages: Array<GriddoPageObject>,
180
- ) {
181
- const { __cx } = config.paths();
95
+ async function saveSitePagesInStore(siteDirName: string, pages: Array<GriddoPageObject>) {
96
+ const { __root } = await getRenderPathsFromDB();
182
97
 
183
98
  try {
184
99
  for (const page of pages) {
185
100
  removeProperties(page, ["editorID", "parentEditorID"]);
186
101
  const filename = `${page.context.page.id}.json`;
187
- const filePath = path.join(__cx, "store", siteDirName, filename);
188
- fsx.writeJSONSync(filePath, page);
102
+ const filePath = path.join(__root, "store", siteDirName, filename);
103
+ // En los listados estáticos y multipage los ids de las páginas son iguales
104
+ await writeUniqueFileSync(filePath, JSON.stringify(page));
189
105
  }
190
106
  } catch (error) {
191
107
  throwError(WriteToStoreError, error);
@@ -203,23 +119,15 @@ function saveSitePagesInStore(
203
119
  * @param siteDirName - The name of the site directory containing the pages.
204
120
  * @param pageIdsArray - A two-dimensional array where each inner array contains numbers representing page files to be removed.
205
121
  */
206
- function removeSitePagesFromStore(
207
- siteDirName: string,
208
- pageIdsArray: Array<Array<number>>,
209
- ) {
210
- const { __cx } = config.paths();
122
+ async function removeSitePagesFromStore(siteDirName: string, pageIdsArray: Array<Array<number>>) {
123
+ const { __root } = await getRenderPathsFromDB();
211
124
 
212
- const processPageIdsArray = (pageIds: Array<number>) => {
125
+ const processPageIdsArray = async (pageIds: Array<number>) => {
213
126
  for (const filename of pageIds) {
214
- const filePath = path.join(
215
- __cx,
216
- "store",
217
- siteDirName,
218
- `${filename}.json`,
219
- );
127
+ const filePath = path.join(__root, "store", siteDirName, `${filename}.json`);
220
128
  try {
221
- if (fs.existsSync(filePath)) {
222
- fs.unlinkSync(filePath);
129
+ if (await pathExists(filePath)) {
130
+ await fsp.unlink(filePath);
223
131
  verboseLog(`Removed file: ${filePath}`);
224
132
  }
225
133
  } catch (error) {
@@ -230,7 +138,7 @@ function removeSitePagesFromStore(
230
138
  };
231
139
 
232
140
  for (const pageIds of pageIdsArray) {
233
- processPageIdsArray(pageIds);
141
+ await processPageIdsArray(pageIds);
234
142
  }
235
143
  }
236
144
 
@@ -239,48 +147,33 @@ function removeSitePagesFromStore(
239
147
  * the domain has been changed. This is necessary because those sites will not
240
148
  * be marked as `sitesToUnpublish` so they must be removed manually.
241
149
  */
242
- function removeOrphanSites(sitesToPublish: Array<Site>, domain: string) {
243
- const { __cx } = getConfig().paths(domain);
244
- const currentSitesInStore = fs.readdirSync(path.join(__cx, "store"));
150
+ async function removeOrphanSites(sitesToPublish: Array<Site>, domain: string) {
151
+ const { __root } = await getRenderPathsFromDB({ domain });
152
+ const storePath = path.join(__root, "store");
153
+
154
+ if (!(await pathExists(storePath))) {
155
+ return;
156
+ }
157
+
158
+ const currentSitesInStore = await fsp.readdir(storePath);
245
159
  const sitesFromAPI = sitesToPublish.map(({ id }) => `${id}`);
246
- const sitesToDelete = currentSitesInStore.filter(
247
- (site) => !sitesFromAPI.includes(site),
248
- );
160
+ const sitesToDelete = currentSitesInStore.filter((site) => !sitesFromAPI.includes(site));
249
161
 
250
162
  for (const site of sitesToDelete) {
251
- fs.rmSync(path.join(__cx, "store", site), { recursive: true, force: true });
163
+ await fsp.rm(path.join(storePath, site), { recursive: true, force: true });
252
164
  verboseLog(`Removed orphan site id: ${site}`);
253
165
  }
254
166
  }
255
167
 
256
- /**
257
- * Returns the list of `activePages` pages that do not currently exist in a
258
- * site's store (probably due to a failed render).
259
- */
260
- function getMissingPublishedPagesInStore(
261
- siteName: string,
262
- activePages: Array<number>,
263
- ) {
264
- const { __cx } = config.paths();
265
- const pagesInStore = getPageInStoreDir(path.join(__cx, "store", siteName));
266
- const missingActivePages: Array<number> = [];
267
- for (const activePage of activePages) {
268
- if (!pagesInStore.includes(activePage)) {
269
- missingActivePages.push(activePage);
270
- }
271
- }
272
- return missingActivePages;
273
- }
274
-
275
168
  /**
276
169
  * Get pages that are not active anymore but are in the store.
277
170
  */
278
- function getZombiePagesInStore(siteDir: string, activePages: Array<number>) {
279
- const { __cx } = getConfig().paths();
280
- const storeDir = path.join(__cx, "store", siteDir);
281
- const sitePages = fs.readdirSync(storeDir);
171
+ async function getZombiePagesInStore(siteDir: string, activePages: Array<number>) {
172
+ const { __root } = await getRenderPathsFromDB();
173
+ const storeDir = path.join(__root, "store", siteDir);
174
+ const sitePages = await fsp.readdir(storeDir);
282
175
 
283
- let zombiePages: Array<number> = [];
176
+ const zombiePages: Array<number> = [];
284
177
  for (const pageFileName of sitePages) {
285
178
  const pageFileNameWithoutExtension = pageFileName.split(".")[0];
286
179
  const pageInStore = Number.parseInt(pageFileNameWithoutExtension);
@@ -299,16 +192,30 @@ function getZombiePagesInStore(siteDir: string, activePages: Array<number>) {
299
192
  return zombiePages;
300
193
  }
301
194
 
195
+ async function writeUniqueFileSync(filePath: string, content: string) {
196
+ const dir = path.dirname(filePath);
197
+ const ext = path.extname(filePath);
198
+ const base = path.basename(filePath, ext);
199
+
200
+ let uniquePath = filePath;
201
+ let counter = 1;
202
+
203
+ while (await pathExists(uniquePath)) {
204
+ const newName = `${base}-${counter}${ext}`;
205
+ uniquePath = path.join(dir, newName);
206
+ counter++;
207
+ }
208
+
209
+ await fsp.writeFile(uniquePath, content);
210
+ }
211
+
302
212
  export {
303
213
  getBuildMetadata,
304
- getBuildPagesFromCachedStore,
305
- getBuildPagesFromStore,
306
- getBuildPagesPath,
307
- getMissingPublishedPagesInStore,
308
214
  getPageInStoreDir,
309
215
  getZombiePagesInStore,
310
216
  removeOrphanSites,
311
217
  removeSitePagesFromStore,
312
- saveSitePagesInStore,
313
218
  saveRenderInfoInStore,
219
+ saveSitePagesInStore,
220
+ writeUniqueFileSync,
314
221
  };
@@ -2,7 +2,6 @@ import type { GatsbyBrowser } from "gatsby";
2
2
 
3
3
  import { SessionProvider } from "@griddo/core";
4
4
  import { browser } from "@griddo-instance";
5
- import * as React from "react";
6
5
 
7
6
  export const disableCorePrefetching = () => {
8
7
  if (browser.disableCorePrefetching) {
@@ -22,9 +21,7 @@ export const onInitialClientRender = () => {
22
21
  }
23
22
  };
24
23
 
25
- export const onPostPrefetchPathname: GatsbyBrowser["onPostPrefetchPathname"] = (
26
- props,
27
- ) => {
24
+ export const onPostPrefetchPathname: GatsbyBrowser["onPostPrefetchPathname"] = (props) => {
28
25
  if (browser.onPostPrefetchPathname) {
29
26
  browser.onPostPrefetchPathname(props);
30
27
  }
@@ -36,75 +33,61 @@ export const onPreRouteUpdate: GatsbyBrowser["onPreRouteUpdate"] = (props) => {
36
33
  }
37
34
  };
38
35
 
39
- export const onPrefetchPathname: GatsbyBrowser["onPrefetchPathname"] = (
40
- props,
41
- ) => {
36
+ export const onPrefetchPathname: GatsbyBrowser["onPrefetchPathname"] = (props) => {
42
37
  if (browser.onPrefetchPathname) {
43
38
  browser.onPrefetchPathname(props);
44
39
  }
45
40
  };
46
41
 
47
- export const onRouteUpdateDelayed: GatsbyBrowser["onRouteUpdateDelayed"] = (
48
- props,
49
- ) => {
42
+ export const onRouteUpdateDelayed: GatsbyBrowser["onRouteUpdateDelayed"] = (props) => {
50
43
  if (browser.onServiceWorkerActive) {
51
44
  browser.onRouteUpdateDelayed(props);
52
45
  }
53
46
  };
54
47
 
55
- export const onServiceWorkerActive: GatsbyBrowser["onServiceWorkerActive"] = (
56
- props,
57
- ) => {
48
+ export const onServiceWorkerActive: GatsbyBrowser["onServiceWorkerActive"] = (props) => {
58
49
  if (browser.onServiceWorkerActive) {
59
50
  browser.onServiceWorkerActive(props);
60
51
  }
61
52
  };
62
53
 
63
- export const onServiceWorkerInstalled: GatsbyBrowser["onServiceWorkerInstalled"] =
64
- (props) => {
65
- if (browser.onServiceWorkerInstalled) {
66
- browser.onServiceWorkerInstalled(props);
67
- }
68
- };
69
-
70
- export const onServiceWorkerRedundant: GatsbyBrowser["onServiceWorkerRedundant"] =
71
- (props) => {
72
- if (browser.onServiceWorkerRedundant) {
73
- browser.onServiceWorkerRedundant(props);
74
- }
75
- };
76
-
77
- export const onServiceWorkerUpdateFound: GatsbyBrowser["onServiceWorkerUpdateFound"] =
78
- (props) => {
79
- if (browser.onServiceWorkerUpdateFound) {
80
- browser.onServiceWorkerUpdateFound(props);
81
- }
82
- };
83
-
84
- export const onServiceWorkerUpdateReady: GatsbyBrowser["onServiceWorkerUpdateReady"] =
85
- (props) => {
86
- if (browser.onServiceWorkerUpdateReady) {
87
- browser.onServiceWorkerUpdateReady(props);
88
- }
89
- };
90
-
91
- export const registerServiceWorker: GatsbyBrowser["registerServiceWorker"] =
92
- () => {
93
- if (browser.registerServiceWorker) {
94
- return browser.registerServiceWorker();
95
- }
96
- };
97
-
98
- export const replaceHydrateFunction: GatsbyBrowser["replaceHydrateFunction"] =
99
- () => {
100
- if (browser.replaceHydrateFunction) {
101
- return browser.replaceHydrateFunction();
102
- }
103
- };
104
-
105
- export const shouldUpdateScroll: GatsbyBrowser["shouldUpdateScroll"] = (
106
- props,
107
- ) => {
54
+ export const onServiceWorkerInstalled: GatsbyBrowser["onServiceWorkerInstalled"] = (props) => {
55
+ if (browser.onServiceWorkerInstalled) {
56
+ browser.onServiceWorkerInstalled(props);
57
+ }
58
+ };
59
+
60
+ export const onServiceWorkerRedundant: GatsbyBrowser["onServiceWorkerRedundant"] = (props) => {
61
+ if (browser.onServiceWorkerRedundant) {
62
+ browser.onServiceWorkerRedundant(props);
63
+ }
64
+ };
65
+
66
+ export const onServiceWorkerUpdateFound: GatsbyBrowser["onServiceWorkerUpdateFound"] = (props) => {
67
+ if (browser.onServiceWorkerUpdateFound) {
68
+ browser.onServiceWorkerUpdateFound(props);
69
+ }
70
+ };
71
+
72
+ export const onServiceWorkerUpdateReady: GatsbyBrowser["onServiceWorkerUpdateReady"] = (props) => {
73
+ if (browser.onServiceWorkerUpdateReady) {
74
+ browser.onServiceWorkerUpdateReady(props);
75
+ }
76
+ };
77
+
78
+ export const registerServiceWorker: GatsbyBrowser["registerServiceWorker"] = () => {
79
+ if (browser.registerServiceWorker) {
80
+ return browser.registerServiceWorker();
81
+ }
82
+ };
83
+
84
+ export const replaceHydrateFunction: GatsbyBrowser["replaceHydrateFunction"] = () => {
85
+ if (browser.replaceHydrateFunction) {
86
+ return browser.replaceHydrateFunction();
87
+ }
88
+ };
89
+
90
+ export const shouldUpdateScroll: GatsbyBrowser["shouldUpdateScroll"] = (props) => {
108
91
  if (browser.shouldUpdateScroll) {
109
92
  return browser.shouldUpdateScroll(props);
110
93
  }
package/gatsby-config.ts CHANGED
@@ -1,33 +1,26 @@
1
1
  import type { GatsbyConfig } from "gatsby";
2
2
 
3
- import { resolveComponentsPath, verboseLog } from "@griddo/cx";
4
- import dotenv from "dotenv";
5
-
6
- dotenv.config();
3
+ import { resolveComponentsPath } from "./exporter/utils/instance";
7
4
 
8
5
  /**
9
6
  * Este process.env.SPAWN_ASSET_PREFIX_WITH_DOMAIN se lee porque
10
- * se ha introducido en el spawnSync del la función runGatsbyBuildCommand.
7
+ * se ha introducido en el spawnSync del la función gatsbyBuild.
11
8
  *
12
9
  * ...
13
- * env: Object.assign(process.env, {
14
- * GRIDDO_EXPORTER: "true",
10
+ * env: {
11
+ * ...process.env,
15
12
  * SPAWN_ASSET_PREFIX_WITH_DOMAIN: assetPrefixWithDomain, <--------------
16
13
  * NODE_OPTIONS: undefined,
17
- * }),
18
- *
19
- * @see runGatsbyBuildCommand()
20
- * @todo quiar el `... || undefined`
14
+ * },
21
15
  */
22
- const griddoAssetPrefixWithDomain =
23
- process.env.SPAWN_ASSET_PREFIX_WITH_DOMAIN || undefined;
16
+ const griddoAssetPrefixWithDomain = process.env.SPAWN_ASSET_PREFIX_WITH_DOMAIN || undefined;
24
17
 
25
- verboseLog(`set config.assetPrefix=${griddoAssetPrefixWithDomain}`);
18
+ if (process.env.GRIDDO_SSG_VERBOSE_LOGS) {
19
+ console.log(`set config.assetPrefix=${griddoAssetPrefixWithDomain}`);
20
+ }
26
21
 
27
22
  // Gatsby configuration file from client
28
- const { plugins, ...gatsbyConfig } = require(
29
- resolveComponentsPath("builder.config.js"),
30
- );
23
+ const { plugins, ...gatsbyConfig } = require(resolveComponentsPath("builder.config.js"));
31
24
 
32
25
  const config: GatsbyConfig = {
33
26
  // Client config
package/gatsby-node.ts CHANGED
@@ -1,49 +1,33 @@
1
- import type { GatsbyPageObject } from "./src/types";
2
1
  import type { GatsbyNode } from "gatsby";
2
+ import type { GatsbyPageObject } from "./src/types";
3
3
 
4
4
  import path from "node:path";
5
5
 
6
- import {
7
- buildLog,
8
- debugLog,
9
- envs,
10
- getBuildPagesFromStore,
11
- getConfig,
12
- pageSizeLog,
13
- verboseLog,
14
- } from "@griddo/cx";
15
-
16
- import { gatsbyRegister } from "./exporter/registers";
17
- import { insertAlert } from "./exporter/utils/alerts";
18
-
19
- const showGriddoBuildLogs = envs.GRIDDO_BUILD_LOGS;
6
+ import { isComponentLibrary } from "./exporter/utils/instance";
7
+ import { appendLogToFile } from "./exporter/utils/loggin";
8
+ import { getBuildPagesFromStore, pageSizeLog } from "./src/gatsby-node-utils";
20
9
 
21
10
  // process.env available through gatsbyBuildCommand.
11
+ const showGriddoBuildLogs = JSON.parse(process.env.GRIDDO_BUILD_LOGS || "false");
22
12
  const assetPrefixWithDomain = process.env.SPAWN_ASSET_PREFIX_WITH_DOMAIN;
23
- const sendAlertActive = JSON.parse(process.env.GRIDDO_ALERT_FEATURE || "false");
24
- const avoidMatchPath = JSON.parse(
25
- process.env.GRIDDO_EXPERIMENTAL_DO_NOT_USE_MATCH_PATH || "false",
26
- );
27
- const useMatchPaths = !avoidMatchPath;
28
- const needsAssetDomainPrefix =
29
- !!assetPrefixWithDomain && assetPrefixWithDomain !== "";
13
+ const needsAssetDomainPrefix = !!assetPrefixWithDomain && assetPrefixWithDomain !== "";
14
+ const nodeOptions = process.env.NODE_OPTIONS;
30
15
 
31
- const { __ssg } = getConfig().paths();
32
- const template = path.join(__ssg, "src/components/template.tsx");
16
+ const template = path.resolve("./src/components/template.tsx");
17
+ const dbFilePath = isComponentLibrary
18
+ ? path.resolve(__dirname, "../../..", ".cx-cache", "db.json")
19
+ : path.resolve(__dirname, "../..", ".cx-cache", "db.json");
33
20
 
34
21
  const pages = getBuildPagesFromStore<GatsbyPageObject>({
35
22
  withSizeProp: showGriddoBuildLogs,
23
+ dbFilePath,
36
24
  });
37
25
 
38
26
  const createPages: GatsbyNode["createPages"] = async ({ actions }) => {
39
- verboseLog(`read assetPrefixWithDomain=${assetPrefixWithDomain}`);
40
- verboseLog(`set needsAssetDomainPrefix=${needsAssetDomainPrefix}`);
41
- console.log(
42
- `using this NODE_OPTIONS in gatsby-node.ts: ${process.env.NODE_OPTIONS}`,
43
- );
44
-
45
- if (avoidMatchPath) {
46
- console.log(`[!] GRIDDO EXPERIMENTAL: Avoiding use of matchPath`);
27
+ if (process.env.GRIDDO_VERBOSE_SSG) {
28
+ console.log(`read assetPrefixWithDomain=${assetPrefixWithDomain}`);
29
+ console.log(`set needsAssetDomainPrefix=${needsAssetDomainPrefix}`);
30
+ console.log(`using NODE_OPTIONS in gatsby-node.ts: ${nodeOptions}`);
47
31
  }
48
32
 
49
33
  for await (const page of pages) {
@@ -51,13 +35,7 @@ const createPages: GatsbyNode["createPages"] = async ({ actions }) => {
51
35
  return;
52
36
  }
53
37
 
54
- const matchPath =
55
- needsAssetDomainPrefix && useMatchPaths
56
- ? page.context.fullPath.compose
57
- : "";
58
-
59
38
  page.component = template;
60
- page.matchPath = matchPath;
61
39
 
62
40
  actions.createPage(page);
63
41
 
@@ -65,46 +43,7 @@ const createPages: GatsbyNode["createPages"] = async ({ actions }) => {
65
43
  const id = page.context.id;
66
44
  const size = pageSizeLog(Math.round(page.size || 0));
67
45
 
68
- if (sendAlertActive && page.size) {
69
- const pageMaxSizeReached =
70
- page.size >
71
- Number.parseInt(process.env.GRIDDO_SSG_MAX_PAGE_SIZE || "524288") /
72
- 1024;
73
-
74
- if (pageMaxSizeReached) {
75
- gatsbyRegister.insert("GATSBY_PAGE_SIZE_TOO_BIG", {
76
- path: page.path,
77
- size: `${Math.round(page.size)}KB`,
78
- });
79
- }
80
- }
81
-
82
- if (showGriddoBuildLogs) {
83
- buildLog(`Creating page ${path} - ${id} - ${size}`);
84
- }
85
- }
86
-
87
- if (sendAlertActive) {
88
- const registerContent = gatsbyRegister.get("GATSBY_PAGE_SIZE_TOO_BIG");
89
-
90
- if (registerContent.entries.length < 1) {
91
- return;
92
- }
93
-
94
- debugLog("\nRender register report\n");
95
- debugLog(registerContent);
96
- debugLog();
97
-
98
- await insertAlert({
99
- description: "Render register report",
100
- area: "Griddo",
101
- level: "W",
102
- fullData: {
103
- output: registerContent,
104
- date: new Date().toISOString(),
105
- },
106
- instantNotification: false,
107
- });
46
+ await appendLogToFile(`Creating page ${path} - ${id} - ${size}`);
108
47
  }
109
48
  };
110
49
 
package/gatsby-ssr.tsx CHANGED
@@ -1,8 +1,9 @@
1
1
  import type { GatsbySSR } from "gatsby";
2
2
 
3
+ import * as React from "react";
4
+
3
5
  import { SessionProvider } from "@griddo/core";
4
6
  import { ssr } from "@griddo-instance";
5
- import * as React from "react";
6
7
 
7
8
  export const wrapPageElement: GatsbySSR["wrapPageElement"] = (props) => {
8
9
  if (ssr.wrapPageElement) {