@griddo/cx 10.6.4 → 10.6.5
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.
- package/README.md +0 -2
- package/build/adapters/gatsby/index.d.ts +1 -1
- package/build/build-complete.js +69 -30
- package/build/constants/endpoints.d.ts +18 -0
- package/build/constants/envs.d.ts +33 -0
- package/build/constants/index.d.ts +53 -0
- package/build/index.d.ts +4 -3
- package/build/index.js +90 -49
- package/build/reset-render.js +69 -30
- package/build/run-start-render.js +90 -49
- package/build/services/settings.d.ts +3 -22
- package/build/services/sites.d.ts +34 -36
- package/build/start-render.js +90 -49
- package/build/types/global.d.ts +1 -1
- package/build/upload-search-content.js +70 -31
- package/build/utils/core-utils.d.ts +9 -60
- package/build/utils/domains.d.ts +5 -1
- package/build/utils/loggin.d.ts +49 -0
- package/build/utils/render.d.ts +11 -0
- package/cx.config.js +3 -4
- package/exporter/adapters/gatsby/index.ts +95 -257
- package/exporter/adapters/gatsby/utils.ts +11 -10
- package/exporter/browser/index.ts +4 -4
- package/exporter/constants/endpoints.ts +42 -0
- package/exporter/constants/envs.ts +86 -0
- package/exporter/constants/index.ts +120 -0
- package/exporter/errors/index.ts +2 -2
- package/exporter/index.ts +11 -10
- package/exporter/react/GriddoIntegrations/index.tsx +3 -3
- package/exporter/{build-complete.ts → scripts/build-complete.ts} +4 -4
- package/exporter/{reset-render.ts → scripts/reset-render.ts} +3 -3
- package/exporter/scripts/start-render.ts +26 -0
- package/exporter/{upload-search-content.ts → scripts/upload-search-content.ts} +3 -3
- package/exporter/services/auth.ts +7 -5
- package/exporter/services/distributors.ts +12 -18
- package/exporter/services/domains.ts +2 -12
- package/exporter/services/navigation.ts +10 -8
- package/exporter/services/robots.ts +2 -6
- package/exporter/services/settings.ts +7 -44
- package/exporter/services/sites.ts +115 -159
- package/exporter/services/store.ts +24 -29
- package/exporter/types/api.ts +1 -1
- package/exporter/types/global.ts +1 -0
- package/exporter/utils/api.ts +11 -10
- package/exporter/utils/core-utils.ts +49 -180
- package/exporter/utils/domains.ts +21 -3
- package/exporter/utils/folders.ts +3 -3
- package/exporter/utils/health-checks.ts +4 -4
- package/exporter/utils/instance.ts +3 -3
- package/exporter/utils/integrations.ts +12 -12
- package/exporter/utils/loggin.ts +159 -0
- package/exporter/utils/pages.ts +15 -15
- package/exporter/utils/render.ts +49 -0
- package/exporter/utils/searches.ts +5 -5
- package/exporter/utils/sites.ts +42 -48
- package/exporter/utils/store.ts +9 -9
- package/gatsby-browser.tsx +46 -48
- package/gatsby-config.ts +5 -5
- package/gatsby-node.ts +7 -7
- package/package.json +21 -26
- package/src/components/Head.tsx +1 -1
- package/src/gatsby-node-utils.ts +1 -1
- package/src/utils.ts +1 -1
- package/exporter/start-render.ts +0 -18
- /package/build/{build-complete.d.ts → scripts/build-complete.d.ts} +0 -0
- /package/build/{move-assets.d.ts → scripts/move-assets.d.ts} +0 -0
- /package/build/{reset-render.d.ts → scripts/reset-render.d.ts} +0 -0
- /package/build/{run-start-render.d.ts → scripts/run-start-render.d.ts} +0 -0
- /package/build/{start-render.d.ts → scripts/start-render.d.ts} +0 -0
- /package/build/{upload-search-content.d.ts → scripts/upload-search-content.d.ts} +0 -0
- /package/exporter/{move-assets.ts → scripts/move-assets.ts} +0 -0
- /package/exporter/{run-start-render.ts → scripts/run-start-render.ts} +0 -0
package/exporter/utils/pages.ts
CHANGED
|
@@ -78,8 +78,8 @@ function getPageMetaData(params: Core.Page): Core.Page["pageMetaData"] {
|
|
|
78
78
|
canonicalURL && canonicalURL.trim() && canonicalURL !== fullUrl
|
|
79
79
|
? canonicalURL.trim()
|
|
80
80
|
: isIndexed
|
|
81
|
-
|
|
82
|
-
|
|
81
|
+
? fullUrl
|
|
82
|
+
: undefined,
|
|
83
83
|
locale,
|
|
84
84
|
url,
|
|
85
85
|
index: isIndexed ? "index" : "noindex",
|
|
@@ -105,7 +105,7 @@ function getPageMetaData(params: Core.Page): Core.Page["pageMetaData"] {
|
|
|
105
105
|
*/
|
|
106
106
|
async function createGriddoPageObject(
|
|
107
107
|
page: GriddoSinglePage | GriddoListPage | GriddoMultiPage,
|
|
108
|
-
additionalInfo: PageAdditionalInfo
|
|
108
|
+
additionalInfo: PageAdditionalInfo,
|
|
109
109
|
): Promise<GriddoPageObject> {
|
|
110
110
|
// Extract some props from page
|
|
111
111
|
const {
|
|
@@ -207,7 +207,7 @@ async function createGriddoPageObject(
|
|
|
207
207
|
*/
|
|
208
208
|
async function createGriddoSinglePage(
|
|
209
209
|
page: GriddoSinglePage,
|
|
210
|
-
additionalInfo: PageAdditionalInfo
|
|
210
|
+
additionalInfo: PageAdditionalInfo,
|
|
211
211
|
) {
|
|
212
212
|
return await createGriddoPageObject(page, additionalInfo);
|
|
213
213
|
}
|
|
@@ -224,7 +224,7 @@ async function createGriddoListPages(
|
|
|
224
224
|
template,
|
|
225
225
|
totalQueriedItems,
|
|
226
226
|
}: GriddoListPage,
|
|
227
|
-
additionalInfo: PageAdditionalInfo
|
|
227
|
+
additionalInfo: PageAdditionalInfo,
|
|
228
228
|
) {
|
|
229
229
|
const allPages = pages.map(async (dataInPage, idx) => {
|
|
230
230
|
const isFirstPage = idx === 0;
|
|
@@ -287,12 +287,12 @@ async function createGriddoListPages(
|
|
|
287
287
|
*/
|
|
288
288
|
function createGriddoMultiPages(
|
|
289
289
|
page: GriddoMultiPage,
|
|
290
|
-
additionalInfo: PageAdditionalInfo
|
|
290
|
+
additionalInfo: PageAdditionalInfo,
|
|
291
291
|
) {
|
|
292
292
|
const { multiPageElements: multiPageElementsBulk, ...cleanPage } = page;
|
|
293
293
|
// TODO: Use structuredClone() when node 18 is available.
|
|
294
294
|
const multiPageElements: MultiPageElements = JSON.parse(
|
|
295
|
-
JSON.stringify(multiPageElementsBulk)
|
|
295
|
+
JSON.stringify(multiPageElementsBulk),
|
|
296
296
|
);
|
|
297
297
|
|
|
298
298
|
// Si no hay un elemento sin slug, como mínimo hay que dibujar una página
|
|
@@ -365,7 +365,7 @@ function createGriddoMultiPages(
|
|
|
365
365
|
* @param page The page to get the multipage parts.
|
|
366
366
|
*/
|
|
367
367
|
function getMultiPageElements(
|
|
368
|
-
page: TemplateWithDistributor
|
|
368
|
+
page: TemplateWithDistributor,
|
|
369
369
|
): Promise<MultiPageElements> | null {
|
|
370
370
|
const multiPageElements = new Promise((resolve) => {
|
|
371
371
|
// Recursive
|
|
@@ -373,7 +373,7 @@ function getMultiPageElements(
|
|
|
373
373
|
// No puede ser Core.Page['template'] porque a medida que va bajando en
|
|
374
374
|
// el árbol ya no es la estructura de un template.
|
|
375
375
|
template: Record<string, unknown>,
|
|
376
|
-
level = 0
|
|
376
|
+
level = 0,
|
|
377
377
|
) => {
|
|
378
378
|
// If it doesn't have a "template strcuture"
|
|
379
379
|
if (!template || typeof template !== "object") return;
|
|
@@ -388,7 +388,7 @@ function getMultiPageElements(
|
|
|
388
388
|
const isValidComponent =
|
|
389
389
|
currentComponent || typeof currentComponent === "object";
|
|
390
390
|
const hasGriddoMultiPageProp = JSON.stringify(
|
|
391
|
-
currentComponent
|
|
391
|
+
currentComponent,
|
|
392
392
|
).includes('"hasGriddoMultiPage":true');
|
|
393
393
|
|
|
394
394
|
if (!isValidComponent) continue;
|
|
@@ -434,7 +434,7 @@ function getMultiPageElements(
|
|
|
434
434
|
function getPage(
|
|
435
435
|
itemsPerPage: number,
|
|
436
436
|
items: Array<Fields.QueriedDataItem>,
|
|
437
|
-
page: number
|
|
437
|
+
page: number,
|
|
438
438
|
) {
|
|
439
439
|
return items?.slice(itemsPerPage * (page - 1), itemsPerPage * page);
|
|
440
440
|
}
|
|
@@ -451,13 +451,13 @@ function getPage(
|
|
|
451
451
|
*/
|
|
452
452
|
function getPageCluster(
|
|
453
453
|
itemsPerPage: number,
|
|
454
|
-
items: Array<Fields.QueriedDataItem
|
|
454
|
+
items: Array<Fields.QueriedDataItem>,
|
|
455
455
|
) {
|
|
456
456
|
const totalPagesCount = Math.ceil(items.length / itemsPerPage) || 1;
|
|
457
457
|
const pageNumbers = Array.from({ length: totalPagesCount }, (_, i) => i + 1);
|
|
458
458
|
|
|
459
459
|
return pageNumbers?.map((pageNumber) =>
|
|
460
|
-
getPage(itemsPerPage, items, pageNumber)
|
|
460
|
+
getPage(itemsPerPage, items, pageNumber),
|
|
461
461
|
);
|
|
462
462
|
}
|
|
463
463
|
|
|
@@ -501,7 +501,7 @@ function removeDuplicateTrailing(url: string) {
|
|
|
501
501
|
function addPageNumberToUrl(
|
|
502
502
|
url: string,
|
|
503
503
|
pageNumber: number,
|
|
504
|
-
options?: { addEndingSlash: boolean }
|
|
504
|
+
options?: { addEndingSlash: boolean },
|
|
505
505
|
) {
|
|
506
506
|
const trailingSlash = url.endsWith("/") ? "" : "/";
|
|
507
507
|
const endingSlash = options?.addEndingSlash ? "/" : "";
|
|
@@ -511,7 +511,7 @@ function addPageNumberToUrl(
|
|
|
511
511
|
}
|
|
512
512
|
|
|
513
513
|
return removeDuplicateTrailing(
|
|
514
|
-
`${url}${trailingSlash}${pageNumber}${endingSlash}
|
|
514
|
+
`${url}${trailingSlash}${pageNumber}${endingSlash}`,
|
|
515
515
|
);
|
|
516
516
|
}
|
|
517
517
|
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
|
|
4
|
+
import { getConfig } from "./core-utils";
|
|
5
|
+
import { throwError } from "../errors";
|
|
6
|
+
import { RenderUUIDError } from "../errors/errors-data";
|
|
7
|
+
|
|
8
|
+
const config = getConfig();
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Creates a sentinel file with the current date and time.
|
|
12
|
+
* This file is used to track later if node_modules/@griddo/cx was cleaned by a
|
|
13
|
+
* npm install from a deploy.
|
|
14
|
+
*/
|
|
15
|
+
function createSentinelDomainRenderFile() {
|
|
16
|
+
const { __cx } = config.paths();
|
|
17
|
+
const renderSentinelFile = path.join(__cx, ".render-sentinel");
|
|
18
|
+
fs.writeFileSync(renderSentinelFile, new Date().toISOString());
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function deleteSentinelFile() {
|
|
22
|
+
const { __cx } = config.paths();
|
|
23
|
+
const renderSentinelFile = path.join(__cx, ".render-sentinel");
|
|
24
|
+
fs.unlinkSync(renderSentinelFile);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function isValidRenderProcessOrThrow() {
|
|
28
|
+
const { __cx } = config.paths();
|
|
29
|
+
const renderSentinelFile = path.join(__cx, ".render-sentinel");
|
|
30
|
+
if (!fs.existsSync(renderSentinelFile)) {
|
|
31
|
+
throwError(RenderUUIDError);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function initRender() {
|
|
36
|
+
createSentinelDomainRenderFile();
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function finishRender() {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export {
|
|
44
|
+
finishRender,
|
|
45
|
+
initRender,
|
|
46
|
+
isValidRenderProcessOrThrow,
|
|
47
|
+
createSentinelDomainRenderFile,
|
|
48
|
+
deleteSentinelFile,
|
|
49
|
+
};
|
|
@@ -10,9 +10,7 @@ import path from "node:path";
|
|
|
10
10
|
import { post } from "./api";
|
|
11
11
|
import { getConfig } from "./core-utils";
|
|
12
12
|
import { getBuildPagesFromCachedStore } from "./store";
|
|
13
|
-
|
|
14
|
-
// Envs
|
|
15
|
-
const API_URL = process.env.API_URL as string;
|
|
13
|
+
import { endpoints } from "../constants";
|
|
16
14
|
|
|
17
15
|
/**
|
|
18
16
|
* Save in the BBDD the content of a page parsed without HTML tags.
|
|
@@ -33,7 +31,7 @@ async function postSearchInfo(props: PostSearchInfoProps) {
|
|
|
33
31
|
} = props;
|
|
34
32
|
|
|
35
33
|
const response = await post<PostSearchInfoResponse>({
|
|
36
|
-
endpoint:
|
|
34
|
+
endpoint: endpoints.SEARCH,
|
|
37
35
|
body: {
|
|
38
36
|
title,
|
|
39
37
|
description,
|
|
@@ -161,7 +159,9 @@ async function uploadRenderedSearchContentToAPI(
|
|
|
161
159
|
|
|
162
160
|
async function startAIEmbeddings() {
|
|
163
161
|
try {
|
|
164
|
-
await post<AIEmbeddingsResponse>({
|
|
162
|
+
await post<AIEmbeddingsResponse>({
|
|
163
|
+
endpoint: endpoints.AI_EMBEDDINGS,
|
|
164
|
+
});
|
|
165
165
|
} catch (error) {
|
|
166
166
|
console.warn(
|
|
167
167
|
"There was an error with the ai embeddings",
|
package/exporter/utils/sites.ts
CHANGED
|
@@ -5,28 +5,20 @@ import path from "node:path";
|
|
|
5
5
|
import fs from "fs-extra";
|
|
6
6
|
import { parse } from "js2xmlparser";
|
|
7
7
|
|
|
8
|
-
import { getConfig
|
|
8
|
+
import { getConfig } from "./core-utils";
|
|
9
|
+
import { infoLog } from "./loggin";
|
|
9
10
|
import { getBuildMetadata } from "./store";
|
|
11
|
+
import { envs } from "../constants";
|
|
10
12
|
import { AuthService } from "../services/auth";
|
|
11
|
-
import {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
(process.env.testSite && parseInt(process.env.testSite));
|
|
21
|
-
|
|
22
|
-
const GRIDDO_RENDER_PAGES = (
|
|
23
|
-
process.env.GRIDDO_RENDER_PAGES ||
|
|
24
|
-
process.env.testPage ||
|
|
25
|
-
""
|
|
26
|
-
)
|
|
27
|
-
.split(",")
|
|
28
|
-
.map((item) => parseInt(item))
|
|
29
|
-
.filter(Boolean);
|
|
13
|
+
import {
|
|
14
|
+
endSiteRender,
|
|
15
|
+
getAllSites,
|
|
16
|
+
getSiteInfo,
|
|
17
|
+
getSiteLanguages,
|
|
18
|
+
getSitemap,
|
|
19
|
+
getSiteSocials,
|
|
20
|
+
startSiteRender,
|
|
21
|
+
} from "../services/sites";
|
|
30
22
|
|
|
31
23
|
const config = getConfig();
|
|
32
24
|
|
|
@@ -34,35 +26,37 @@ const config = getConfig();
|
|
|
34
26
|
* Check the instance sites and returns site prepared to be published and unpublished.
|
|
35
27
|
*/
|
|
36
28
|
async function checkSites(domain: string) {
|
|
37
|
-
console.info(`API URL ${
|
|
29
|
+
console.info(`API URL ${envs.GRIDDO_API_URL as string}`);
|
|
38
30
|
|
|
39
31
|
// Login to API
|
|
40
32
|
await AuthService.login();
|
|
41
33
|
|
|
42
34
|
// Get all sites. An array of Site
|
|
43
|
-
const allSites = await
|
|
35
|
+
const allSites = await getAllSites();
|
|
36
|
+
|
|
44
37
|
// Filter the array of sites to get only the ones to build/render
|
|
45
|
-
const validSites = GRIDDO_RENDER_ALL_SITES
|
|
38
|
+
const validSites = envs.GRIDDO_RENDER_ALL_SITES
|
|
46
39
|
? allSites.filter(
|
|
47
|
-
(site) =>
|
|
48
|
-
|
|
40
|
+
(site) =>
|
|
41
|
+
!envs.GRIDDO_RENDER_SITE || site.id === envs.GRIDDO_RENDER_SITE,
|
|
42
|
+
)
|
|
49
43
|
: allSites.filter((site) =>
|
|
50
|
-
GRIDDO_RENDER_SITE
|
|
51
|
-
? site.id === GRIDDO_RENDER_SITE
|
|
52
|
-
: !!site.shouldBeUpdated
|
|
53
|
-
|
|
44
|
+
envs.GRIDDO_RENDER_SITE
|
|
45
|
+
? site.id === envs.GRIDDO_RENDER_SITE
|
|
46
|
+
: !!site.shouldBeUpdated,
|
|
47
|
+
);
|
|
54
48
|
|
|
55
49
|
// If there are valid sites...
|
|
56
50
|
if (validSites.length) {
|
|
57
51
|
for (const site of validSites) {
|
|
58
|
-
const { items } = await
|
|
52
|
+
const { items } = await getSiteLanguages(site.id);
|
|
59
53
|
|
|
60
54
|
// Añadimos la prop domains con el dominio "cocinado" con los idiomas y teniendo en cuenta solo el dominio actual
|
|
61
55
|
site.domains = items
|
|
62
56
|
.filter(
|
|
63
57
|
(item) =>
|
|
64
58
|
item.domain &&
|
|
65
|
-
(item.domain.slug === domain || item.domain.slug === `/${domain}`)
|
|
59
|
+
(item.domain.slug === domain || item.domain.slug === `/${domain}`),
|
|
66
60
|
)
|
|
67
61
|
.map((item) => ({ [item.id]: `${item.domain.slug}${item.path}` }));
|
|
68
62
|
}
|
|
@@ -70,14 +64,14 @@ async function checkSites(domain: string) {
|
|
|
70
64
|
|
|
71
65
|
// Save sites object to publish
|
|
72
66
|
const sitesToPublish = validSites.filter((site) =>
|
|
73
|
-
GRIDDO_RENDER_SITE
|
|
74
|
-
? site.id === GRIDDO_RENDER_SITE
|
|
75
|
-
: !!site.isPublished && site.domains.length > 0
|
|
67
|
+
envs.GRIDDO_RENDER_SITE
|
|
68
|
+
? site.id === envs.GRIDDO_RENDER_SITE
|
|
69
|
+
: !!site.isPublished && site.domains.length > 0,
|
|
76
70
|
);
|
|
77
71
|
|
|
78
72
|
// Save sites object to unpublish
|
|
79
73
|
const sitesToUnpublish = validSites.filter(
|
|
80
|
-
(site) => !site.isPublished && site.shouldBeUpdated
|
|
74
|
+
(site) => !site.isPublished && site.shouldBeUpdated,
|
|
81
75
|
);
|
|
82
76
|
|
|
83
77
|
return {
|
|
@@ -95,7 +89,7 @@ async function checkSites(domain: string) {
|
|
|
95
89
|
*/
|
|
96
90
|
async function unpublishSites(sites: Array<Site>) {
|
|
97
91
|
for (const site of sites) {
|
|
98
|
-
const buildInfo = await
|
|
92
|
+
const buildInfo = await startSiteRender(site.id);
|
|
99
93
|
const { siteHash } = buildInfo;
|
|
100
94
|
const body = {
|
|
101
95
|
siteHash,
|
|
@@ -103,7 +97,7 @@ async function unpublishSites(sites: Array<Site>) {
|
|
|
103
97
|
unpublishHashes: [],
|
|
104
98
|
};
|
|
105
99
|
|
|
106
|
-
await
|
|
100
|
+
await endSiteRender(site.id, body);
|
|
107
101
|
}
|
|
108
102
|
}
|
|
109
103
|
|
|
@@ -116,17 +110,17 @@ async function unpublishSites(sites: Array<Site>) {
|
|
|
116
110
|
* @see SiteData
|
|
117
111
|
*/
|
|
118
112
|
async function getSiteData(siteID: number) {
|
|
119
|
-
const buildData = await
|
|
120
|
-
const siteInfo = await
|
|
121
|
-
const siteLangs = await
|
|
122
|
-
const socials = await
|
|
113
|
+
const buildData = await startSiteRender(siteID);
|
|
114
|
+
const siteInfo = await getSiteInfo(siteID);
|
|
115
|
+
const siteLangs = await getSiteLanguages(siteID);
|
|
116
|
+
const socials = await getSiteSocials(siteID);
|
|
123
117
|
const siteLangsInfo = siteLangs.items;
|
|
124
118
|
const defaultLang = siteLangsInfo.find((lang) => lang.isDefault);
|
|
125
119
|
|
|
126
120
|
const { siteHash, unpublishHashes, publishIds } = buildData;
|
|
127
121
|
const { headers, footers } = siteInfo;
|
|
128
|
-
const validPagesIds = GRIDDO_RENDER_PAGES.length
|
|
129
|
-
? GRIDDO_RENDER_PAGES.filter((item) => publishIds.includes(item))
|
|
122
|
+
const validPagesIds = envs.GRIDDO_RENDER_PAGES.length
|
|
123
|
+
? envs.GRIDDO_RENDER_PAGES.filter((item) => publishIds.includes(item))
|
|
130
124
|
: publishIds;
|
|
131
125
|
|
|
132
126
|
const siteData: SiteData = {
|
|
@@ -167,10 +161,10 @@ async function generateBuildReport() {
|
|
|
167
161
|
|
|
168
162
|
fs.writeFileSync(
|
|
169
163
|
path.join(__cx, "dist", "__build-report__.json"),
|
|
170
|
-
JSON.stringify(report)
|
|
164
|
+
JSON.stringify(report),
|
|
171
165
|
);
|
|
172
166
|
|
|
173
|
-
|
|
167
|
+
infoLog(`Build report saved for ${buildSitesInfo.length} site(s)`);
|
|
174
168
|
}
|
|
175
169
|
|
|
176
170
|
/**
|
|
@@ -189,7 +183,7 @@ async function generateSitemaps() {
|
|
|
189
183
|
for (const lang of languages) {
|
|
190
184
|
if (AuthService.headers) AuthService.headers["lang"] = lang.id.toString();
|
|
191
185
|
|
|
192
|
-
const response = await
|
|
186
|
+
const response = await getSitemap(siteID);
|
|
193
187
|
|
|
194
188
|
if (!response) continue;
|
|
195
189
|
|
|
@@ -201,7 +195,7 @@ async function generateSitemaps() {
|
|
|
201
195
|
if (!home) continue;
|
|
202
196
|
|
|
203
197
|
const langDomain = site.domains.find(
|
|
204
|
-
(domain) => Object.keys(domain)[0] == lang.id.toString()
|
|
198
|
+
(domain) => Object.keys(domain)[0] == lang.id.toString(),
|
|
205
199
|
);
|
|
206
200
|
|
|
207
201
|
if (!langDomain) continue;
|
|
@@ -232,7 +226,7 @@ async function generateSitemaps() {
|
|
|
232
226
|
saveFile(exactPath, siteMap);
|
|
233
227
|
|
|
234
228
|
sitemaps.push(
|
|
235
|
-
`${home.endsWith("/") ? home.slice(0, -1) : home}${sitemapName}
|
|
229
|
+
`${home.endsWith("/") ? home.slice(0, -1) : home}${sitemapName}`,
|
|
236
230
|
);
|
|
237
231
|
}
|
|
238
232
|
|
package/exporter/utils/store.ts
CHANGED
|
@@ -19,7 +19,7 @@ const config = getConfig();
|
|
|
19
19
|
* @param domain - The domain to get the pages from.
|
|
20
20
|
*/
|
|
21
21
|
function getBuildPagesFromCachedStore<PageType extends GriddoPageObject>(
|
|
22
|
-
domain: string
|
|
22
|
+
domain: string,
|
|
23
23
|
) {
|
|
24
24
|
const { __caches } = config.paths(domain);
|
|
25
25
|
return getBuildPagesFromStore<PageType>({
|
|
@@ -44,7 +44,7 @@ function* getBuildPagesFromStore<PageType extends GriddoPageObject>(args?: {
|
|
|
44
44
|
const { __cx } = config.paths();
|
|
45
45
|
const pagesDirPath = basePath || path.join(__cx, "store");
|
|
46
46
|
const jsonFilePaths = walk(pagesDirPath).filter(
|
|
47
|
-
(file) => path.extname(file) === ".json"
|
|
47
|
+
(file) => path.extname(file) === ".json",
|
|
48
48
|
);
|
|
49
49
|
|
|
50
50
|
for (const filePath of jsonFilePaths) {
|
|
@@ -77,7 +77,7 @@ function getBuildPagesPath() {
|
|
|
77
77
|
|
|
78
78
|
const PAGES_DIR = path.join(__cx, "store");
|
|
79
79
|
const PAGE_FILES = walk(PAGES_DIR).filter(
|
|
80
|
-
(file) => path.extname(file) === ".json"
|
|
80
|
+
(file) => path.extname(file) === ".json",
|
|
81
81
|
);
|
|
82
82
|
|
|
83
83
|
return PAGE_FILES;
|
|
@@ -90,7 +90,7 @@ function getBuildPagesPath() {
|
|
|
90
90
|
async function getBuildMetadata(): Promise<BuildMetaData> {
|
|
91
91
|
const { __cx } = config.paths();
|
|
92
92
|
const { sitesToPublish, createdPages, buildProcessData } = fsx.readJSONSync(
|
|
93
|
-
path.join(__cx, "store", "metadata", "render-info.json")
|
|
93
|
+
path.join(__cx, "store", "metadata", "render-info.json"),
|
|
94
94
|
);
|
|
95
95
|
|
|
96
96
|
return {
|
|
@@ -125,7 +125,7 @@ function saveRenderInfoInStore(basePath: string, renderInfo: RenderInfo) {
|
|
|
125
125
|
|
|
126
126
|
fs.writeFileSync(
|
|
127
127
|
path.join(__cx, "store", "metadata", "render-info.json"),
|
|
128
|
-
JSON.stringify(renderInfo)
|
|
128
|
+
JSON.stringify(renderInfo),
|
|
129
129
|
);
|
|
130
130
|
}
|
|
131
131
|
|
|
@@ -136,7 +136,7 @@ function saveRenderInfoInStore(basePath: string, renderInfo: RenderInfo) {
|
|
|
136
136
|
*/
|
|
137
137
|
function getPagesInStoreDirBySitePages(
|
|
138
138
|
basePath: string,
|
|
139
|
-
pages: Array<number
|
|
139
|
+
pages: Array<number>,
|
|
140
140
|
): Array<number> {
|
|
141
141
|
const allPagesInStore = getPageInStoreDir(basePath);
|
|
142
142
|
const pagesBySite = allPagesInStore.filter((page) => pages.includes(page));
|
|
@@ -234,7 +234,7 @@ async function getPagesToCreateOrDelete(
|
|
|
234
234
|
pages: Array<number>;
|
|
235
235
|
validPagesIds: Array<number>;
|
|
236
236
|
changedPages: Array<number>;
|
|
237
|
-
}
|
|
237
|
+
},
|
|
238
238
|
) {
|
|
239
239
|
const { changedPages, pages, validPagesIds, sitesToPublish } = sitePages;
|
|
240
240
|
// Array<ids> de las páginas que están físicamente en el store en el
|
|
@@ -244,7 +244,7 @@ async function getPagesToCreateOrDelete(
|
|
|
244
244
|
// Array<ids> que están el `validPagesIds` pero no están por algún
|
|
245
245
|
// motivo en el store. Se incluyen porque deben ser creadas.
|
|
246
246
|
const pagesMissingInStore = validPagesIds.filter(
|
|
247
|
-
(page) => !pagesInStore.includes(page)
|
|
247
|
+
(page) => !pagesInStore.includes(page),
|
|
248
248
|
);
|
|
249
249
|
|
|
250
250
|
// Array<ids> para enviar al store, que son las que han cambiado y
|
|
@@ -261,7 +261,7 @@ async function getPagesToCreateOrDelete(
|
|
|
261
261
|
// 1 - Elimina del array final las páginas borradas.
|
|
262
262
|
// 2 - Elimina las posibles páginas (ids) duplicadas. (new Set)
|
|
263
263
|
const pagesToWriteToStore = Array.from(new Set(pagesToStore)).filter(
|
|
264
|
-
(page) => !pagesToDeleteFromStore.includes(page)
|
|
264
|
+
(page) => !pagesToDeleteFromStore.includes(page),
|
|
265
265
|
);
|
|
266
266
|
|
|
267
267
|
// 1 - Leer el store
|
package/gatsby-browser.tsx
CHANGED
|
@@ -23,7 +23,7 @@ export const onInitialClientRender = () => {
|
|
|
23
23
|
};
|
|
24
24
|
|
|
25
25
|
export const onPostPrefetchPathname: GatsbyBrowser["onPostPrefetchPathname"] = (
|
|
26
|
-
props
|
|
26
|
+
props,
|
|
27
27
|
) => {
|
|
28
28
|
if (browser.onPostPrefetchPathname) {
|
|
29
29
|
browser.onPostPrefetchPathname(props);
|
|
@@ -37,7 +37,7 @@ export const onPreRouteUpdate: GatsbyBrowser["onPreRouteUpdate"] = (props) => {
|
|
|
37
37
|
};
|
|
38
38
|
|
|
39
39
|
export const onPrefetchPathname: GatsbyBrowser["onPrefetchPathname"] = (
|
|
40
|
-
props
|
|
40
|
+
props,
|
|
41
41
|
) => {
|
|
42
42
|
if (browser.onPrefetchPathname) {
|
|
43
43
|
browser.onPrefetchPathname(props);
|
|
@@ -45,7 +45,7 @@ export const onPrefetchPathname: GatsbyBrowser["onPrefetchPathname"] = (
|
|
|
45
45
|
};
|
|
46
46
|
|
|
47
47
|
export const onRouteUpdateDelayed: GatsbyBrowser["onRouteUpdateDelayed"] = (
|
|
48
|
-
props
|
|
48
|
+
props,
|
|
49
49
|
) => {
|
|
50
50
|
if (browser.onServiceWorkerActive) {
|
|
51
51
|
browser.onRouteUpdateDelayed(props);
|
|
@@ -53,59 +53,57 @@ export const onRouteUpdateDelayed: GatsbyBrowser["onRouteUpdateDelayed"] = (
|
|
|
53
53
|
};
|
|
54
54
|
|
|
55
55
|
export const onServiceWorkerActive: GatsbyBrowser["onServiceWorkerActive"] = (
|
|
56
|
-
props
|
|
56
|
+
props,
|
|
57
57
|
) => {
|
|
58
58
|
if (browser.onServiceWorkerActive) {
|
|
59
59
|
browser.onServiceWorkerActive(props);
|
|
60
60
|
}
|
|
61
61
|
};
|
|
62
62
|
|
|
63
|
-
export const onServiceWorkerInstalled: GatsbyBrowser["onServiceWorkerInstalled"] =
|
|
64
|
-
props
|
|
65
|
-
)
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
)
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
}
|
|
105
|
-
};
|
|
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
|
+
};
|
|
106
104
|
|
|
107
105
|
export const shouldUpdateScroll: GatsbyBrowser["shouldUpdateScroll"] = (
|
|
108
|
-
props
|
|
106
|
+
props,
|
|
109
107
|
) => {
|
|
110
108
|
if (browser.shouldUpdateScroll) {
|
|
111
109
|
return browser.shouldUpdateScroll(props);
|
package/gatsby-config.ts
CHANGED
|
@@ -2,7 +2,7 @@ import type { GatsbyConfig } from "gatsby";
|
|
|
2
2
|
|
|
3
3
|
import dotenv from "dotenv";
|
|
4
4
|
|
|
5
|
-
import { resolveComponentsPath,
|
|
5
|
+
import { resolveComponentsPath, verboseLog } from "./build";
|
|
6
6
|
|
|
7
7
|
dotenv.config();
|
|
8
8
|
|
|
@@ -12,13 +12,13 @@ dotenv.config();
|
|
|
12
12
|
const griddoAssetPrefixWithDomain =
|
|
13
13
|
process.env.SPAWN_ASSET_PREFIX_WITH_DOMAIN || undefined;
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
verboseLog(`set config.assetPrefix=${griddoAssetPrefixWithDomain}`);
|
|
16
16
|
|
|
17
17
|
// Gatsby configuration file from client
|
|
18
18
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
19
|
-
const { plugins, ...gatsbyConfig } = require(
|
|
20
|
-
"builder.config.js"
|
|
21
|
-
)
|
|
19
|
+
const { plugins, ...gatsbyConfig } = require(
|
|
20
|
+
resolveComponentsPath("builder.config.js"),
|
|
21
|
+
);
|
|
22
22
|
|
|
23
23
|
const config: GatsbyConfig = {
|
|
24
24
|
// Client config
|
package/gatsby-node.ts
CHANGED
|
@@ -6,9 +6,9 @@ import path from "node:path";
|
|
|
6
6
|
import {
|
|
7
7
|
getBuildPagesFromStore,
|
|
8
8
|
getConfig,
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
infoLog,
|
|
10
|
+
pageSizeLog,
|
|
11
|
+
verboseLog,
|
|
12
12
|
} from "./build";
|
|
13
13
|
|
|
14
14
|
const griddoBuildLogs = JSON.parse(process.env.GRIDDO_BUILD_LOGS || "false");
|
|
@@ -23,8 +23,8 @@ const pages = getBuildPagesFromStore<GatsbyPageObject>({
|
|
|
23
23
|
});
|
|
24
24
|
|
|
25
25
|
const createPages: GatsbyNode["createPages"] = async ({ actions }) => {
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
verboseLog(`read assetPrefixWithDomain=${assetPrefixWithDomain}`);
|
|
27
|
+
verboseLog(`set needsAssetDomainPrefix=${needsAssetDomainPrefix}`);
|
|
28
28
|
|
|
29
29
|
for await (const page of pages) {
|
|
30
30
|
if (!page) return;
|
|
@@ -41,9 +41,9 @@ const createPages: GatsbyNode["createPages"] = async ({ actions }) => {
|
|
|
41
41
|
if (griddoBuildLogs) {
|
|
42
42
|
const path = page.path;
|
|
43
43
|
const id = page.context.id;
|
|
44
|
-
const size =
|
|
44
|
+
const size = pageSizeLog(Math.round(page.size || 0));
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
infoLog(`Creating page ${path} - ${id} - ${size}`);
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
49
|
};
|