@griddo/cx 11.7.6-rc.2 → 11.7.6
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 +226 -27
- package/build/adapters/gatsby/index.d.ts +4 -0
- package/build/adapters/gatsby/utils.d.ts +22 -0
- package/build/artifacts/index.d.ts +6 -0
- package/build/commands/end-render.d.ts +2 -0
- package/build/commands/move-assets.d.ts +1 -0
- package/build/commands/prepare-domains-render.d.ts +1 -0
- package/build/commands/reset-render.d.ts +2 -0
- package/build/commands/start-render.d.ts +2 -0
- package/build/commands/upload-search-content.d.ts +2 -0
- package/build/constants/endpoints.d.ts +19 -0
- package/build/constants/envs.d.ts +37 -0
- package/build/constants/index.d.ts +57 -0
- package/build/end-render.js +74 -0
- package/build/end-render.js.map +7 -0
- package/build/errors/errors-data.d.ts +22 -0
- package/build/errors/index.d.ts +15 -0
- package/build/index.d.ts +29 -0
- package/build/index.js +73 -0
- package/build/index.js.map +7 -0
- package/build/prepare-domains-render.js +73 -0
- package/build/prepare-domains-render.js.map +7 -0
- package/build/react/Favicon/index.d.ts +5 -0
- package/build/react/Favicon/utils.d.ts +9 -0
- package/build/react/GriddoIntegrations/index.d.ts +20 -0
- package/build/react/GriddoIntegrations/utils.d.ts +26 -0
- package/{react/index.tsx → build/react/index.d.ts} +0 -1
- package/build/react/index.js +3 -0
- package/build/registers/api.d.ts +9 -0
- package/build/registers/gatsby.d.ts +9 -0
- package/build/registers/index.d.ts +3 -0
- package/build/reset-render.js +74 -0
- package/build/reset-render.js.map +7 -0
- package/build/services/auth.d.ts +10 -0
- package/build/services/domains.d.ts +6 -0
- package/build/services/navigation.d.ts +50 -0
- package/build/services/reference-fields.d.ts +20 -0
- package/build/services/register.d.ts +36 -0
- package/build/services/robots.d.ts +19 -0
- package/build/services/settings.d.ts +4 -0
- package/build/services/sites.d.ts +29 -0
- package/build/services/store.d.ts +6 -0
- package/build/start-render.js +100 -0
- package/build/start-render.js.map +7 -0
- package/build/types/api.d.ts +142 -0
- package/build/types/global.d.ts +84 -0
- package/build/types/navigation.d.ts +28 -0
- package/build/types/pages.d.ts +144 -0
- package/build/types/sites.d.ts +57 -0
- package/build/types/templates.d.ts +8 -0
- package/build/upload-search-content.js +74 -0
- package/build/upload-search-content.js.map +7 -0
- package/build/utils/alerts.d.ts +3 -0
- package/build/utils/api.d.ts +23 -0
- package/build/utils/cache.d.ts +35 -0
- package/build/utils/core-utils.d.ts +107 -0
- package/build/utils/create-build-data.d.ts +8 -0
- package/build/utils/domains.d.ts +13 -0
- package/build/utils/folders.d.ts +53 -0
- package/build/utils/health-checks.d.ts +7 -0
- package/build/utils/images.d.ts +16 -0
- package/build/utils/instance.d.ts +21 -0
- package/build/utils/loggin.d.ts +51 -0
- package/build/utils/pages.d.ts +34 -0
- package/build/utils/render.d.ts +13 -0
- package/build/utils/searches.d.ts +15 -0
- package/build/utils/sites.d.ts +31 -0
- package/build/utils/store.d.ts +81 -0
- package/cx.config.d.ts +5 -0
- package/cx.config.js +36 -0
- package/exporter/adapters/gatsby/index.ts +147 -66
- package/exporter/adapters/gatsby/utils.ts +161 -0
- package/exporter/artifacts/README.md +34 -0
- package/exporter/artifacts/index.ts +33 -0
- package/exporter/build.sh +38 -4
- package/exporter/commands/end-render.ts +69 -73
- package/exporter/commands/move-assets.ts +11 -0
- package/exporter/commands/prepare-domains-render.ts +31 -144
- package/exporter/commands/reset-render.ts +1 -10
- package/exporter/commands/start-render.ts +44 -23
- package/exporter/commands/upload-search-content.ts +20 -194
- package/exporter/constants/envs.ts +55 -57
- package/exporter/constants/index.ts +129 -0
- package/exporter/{constants/errors.ts → errors/errors-data.ts} +14 -31
- package/exporter/{utils/errors.ts → errors/index.ts} +9 -10
- package/exporter/index.ts +82 -0
- package/{react → exporter/react}/Favicon/index.tsx +7 -1
- package/{react → exporter/react}/GriddoIntegrations/index.tsx +14 -6
- package/{react → exporter/react}/GriddoIntegrations/utils.ts +9 -4
- package/exporter/react/index.tsx +11 -0
- package/exporter/registers/api.ts +14 -0
- package/exporter/registers/gatsby.ts +14 -0
- package/exporter/registers/index.ts +4 -0
- package/exporter/services/auth.ts +6 -7
- package/exporter/services/domains.ts +16 -0
- package/exporter/services/navigation.ts +10 -4
- package/exporter/services/reference-fields.ts +23 -8
- package/exporter/services/register.ts +113 -0
- package/exporter/services/robots.ts +16 -9
- package/exporter/services/settings.ts +17 -0
- package/exporter/services/sites.ts +24 -35
- package/exporter/services/store.ts +78 -120
- package/exporter/types/api.ts +27 -24
- package/exporter/types/global.ts +10 -7
- package/exporter/types/navigation.ts +1 -1
- package/exporter/types/pages.ts +3 -2
- package/exporter/types/sites.ts +2 -1
- package/exporter/utils/alerts.ts +29 -0
- package/exporter/utils/api.ts +82 -46
- package/exporter/utils/cache.ts +62 -37
- package/exporter/utils/core-utils.ts +248 -129
- package/exporter/utils/create-build-data.ts +17 -0
- package/exporter/utils/domains.ts +7 -10
- package/exporter/utils/folders.ts +95 -187
- package/exporter/utils/health-checks.ts +64 -0
- package/exporter/utils/images.ts +6 -1
- package/exporter/utils/instance.ts +12 -9
- package/exporter/utils/loggin.ts +91 -32
- package/exporter/utils/pages.ts +88 -23
- package/exporter/utils/render.ts +48 -149
- package/exporter/utils/searches.ts +156 -0
- package/exporter/utils/sites.ts +90 -81
- package/exporter/utils/store.ts +180 -87
- package/gatsby-browser.tsx +58 -41
- package/gatsby-config.ts +12 -6
- package/gatsby-node.ts +77 -15
- package/gatsby-ssr.tsx +1 -2
- package/package.json +78 -36
- package/src/README.md +7 -0
- package/src/components/Head.tsx +46 -13
- package/src/components/template.tsx +30 -8
- package/src/gatsby-node-utils.ts +2 -91
- package/src/html.tsx +11 -2
- package/src/types.ts +5 -5
- package/start-render.js +7 -0
- package/tsconfig.json +3 -5
- package/build/adapters/gatsby/actions/clean.js +0 -10
- package/build/adapters/gatsby/actions/clean.js.map +0 -1
- package/build/adapters/gatsby/actions/close.js +0 -12
- package/build/adapters/gatsby/actions/close.js.map +0 -1
- package/build/adapters/gatsby/actions/data.js +0 -18
- package/build/adapters/gatsby/actions/data.js.map +0 -1
- package/build/adapters/gatsby/actions/healthCheck.js +0 -10
- package/build/adapters/gatsby/actions/healthCheck.js.map +0 -1
- package/build/adapters/gatsby/actions/init.js +0 -9
- package/build/adapters/gatsby/actions/init.js.map +0 -1
- package/build/adapters/gatsby/actions/meta.js +0 -14
- package/build/adapters/gatsby/actions/meta.js.map +0 -1
- package/build/adapters/gatsby/actions/prepare.js +0 -9
- package/build/adapters/gatsby/actions/prepare.js.map +0 -1
- package/build/adapters/gatsby/actions/relocation.js +0 -15
- package/build/adapters/gatsby/actions/relocation.js.map +0 -1
- package/build/adapters/gatsby/actions/restore.js +0 -26
- package/build/adapters/gatsby/actions/restore.js.map +0 -1
- package/build/adapters/gatsby/actions/ssg.js +0 -9
- package/build/adapters/gatsby/actions/ssg.js.map +0 -1
- package/build/adapters/gatsby/actions/sync.js +0 -51
- package/build/adapters/gatsby/actions/sync.js.map +0 -1
- package/build/adapters/gatsby/index.js +0 -78
- package/build/adapters/gatsby/index.js.map +0 -1
- package/build/adapters/gatsby/shared/context.js +0 -31
- package/build/adapters/gatsby/shared/context.js.map +0 -1
- package/build/adapters/gatsby/shared/diff-assets.js +0 -101
- package/build/adapters/gatsby/shared/diff-assets.js.map +0 -1
- package/build/adapters/gatsby/shared/extract-assets.js +0 -58
- package/build/adapters/gatsby/shared/extract-assets.js.map +0 -1
- package/build/adapters/gatsby/shared/gatsby-build.js +0 -49
- package/build/adapters/gatsby/shared/gatsby-build.js.map +0 -1
- package/build/adapters/gatsby/shared/sync-render.js +0 -212
- package/build/adapters/gatsby/shared/sync-render.js.map +0 -1
- package/build/adapters/gatsby/shared/types.js +0 -3
- package/build/adapters/gatsby/shared/types.js.map +0 -1
- package/build/commands/end-render.js +0 -88
- package/build/commands/end-render.js.map +0 -1
- package/build/commands/prepare-assets-directory.js +0 -32
- package/build/commands/prepare-assets-directory.js.map +0 -1
- package/build/commands/prepare-domains-render.js +0 -133
- package/build/commands/prepare-domains-render.js.map +0 -1
- package/build/commands/reset-render.js +0 -22
- package/build/commands/reset-render.js.map +0 -1
- package/build/commands/start-render.js +0 -45
- package/build/commands/start-render.js.map +0 -1
- package/build/commands/upload-search-content.js +0 -180
- package/build/commands/upload-search-content.js.map +0 -1
- package/build/constants/endpoints.js +0 -42
- package/build/constants/endpoints.js.map +0 -1
- package/build/constants/envs.js +0 -68
- package/build/constants/envs.js.map +0 -1
- package/build/constants/errors.js +0 -87
- package/build/constants/errors.js.map +0 -1
- package/build/services/auth.js +0 -40
- package/build/services/auth.js.map +0 -1
- package/build/services/db-class.js +0 -49
- package/build/services/db-class.js.map +0 -1
- package/build/services/db.js +0 -34
- package/build/services/db.js.map +0 -1
- package/build/services/navigation.js +0 -96
- package/build/services/navigation.js.map +0 -1
- package/build/services/reference-fields.js +0 -131
- package/build/services/reference-fields.js.map +0 -1
- package/build/services/robots.js +0 -60
- package/build/services/robots.js.map +0 -1
- package/build/services/sites.js +0 -109
- package/build/services/sites.js.map +0 -1
- package/build/services/store.js +0 -282
- package/build/services/store.js.map +0 -1
- package/build/types/api.js +0 -3
- package/build/types/api.js.map +0 -1
- package/build/types/global.js +0 -3
- package/build/types/global.js.map +0 -1
- package/build/types/navigation.js +0 -3
- package/build/types/navigation.js.map +0 -1
- package/build/types/pages.js +0 -3
- package/build/types/pages.js.map +0 -1
- package/build/types/render.js +0 -10
- package/build/types/render.js.map +0 -1
- package/build/types/sites.js +0 -3
- package/build/types/sites.js.map +0 -1
- package/build/types/templates.js +0 -3
- package/build/types/templates.js.map +0 -1
- package/build/utils/api.js +0 -161
- package/build/utils/api.js.map +0 -1
- package/build/utils/artifacts.js +0 -34
- package/build/utils/artifacts.js.map +0 -1
- package/build/utils/brush.js +0 -30
- package/build/utils/brush.js.map +0 -1
- package/build/utils/cache.js +0 -106
- package/build/utils/cache.js.map +0 -1
- package/build/utils/check-health.js +0 -68
- package/build/utils/check-health.js.map +0 -1
- package/build/utils/core-utils.js +0 -283
- package/build/utils/core-utils.js.map +0 -1
- package/build/utils/domains.js +0 -37
- package/build/utils/domains.js.map +0 -1
- package/build/utils/errors.js +0 -30
- package/build/utils/errors.js.map +0 -1
- package/build/utils/folders.js +0 -362
- package/build/utils/folders.js.map +0 -1
- package/build/utils/images.js +0 -45
- package/build/utils/images.js.map +0 -1
- package/build/utils/instance.js +0 -66
- package/build/utils/instance.js.map +0 -1
- package/build/utils/loggin.js +0 -108
- package/build/utils/loggin.js.map +0 -1
- package/build/utils/pages.js +0 -359
- package/build/utils/pages.js.map +0 -1
- package/build/utils/render.js +0 -144
- package/build/utils/render.js.map +0 -1
- package/build/utils/sites.js +0 -240
- package/build/utils/sites.js.map +0 -1
- package/build/utils/store.js +0 -193
- package/build/utils/store.js.map +0 -1
- package/exporter/adapters/gatsby/actions/clean.ts +0 -14
- package/exporter/adapters/gatsby/actions/close.ts +0 -17
- package/exporter/adapters/gatsby/actions/data.ts +0 -25
- package/exporter/adapters/gatsby/actions/healthCheck.ts +0 -10
- package/exporter/adapters/gatsby/actions/init.ts +0 -12
- package/exporter/adapters/gatsby/actions/meta.ts +0 -18
- package/exporter/adapters/gatsby/actions/prepare.ts +0 -9
- package/exporter/adapters/gatsby/actions/relocation.ts +0 -15
- package/exporter/adapters/gatsby/actions/restore.ts +0 -36
- package/exporter/adapters/gatsby/actions/ssg.ts +0 -12
- package/exporter/adapters/gatsby/actions/sync.ts +0 -71
- package/exporter/adapters/gatsby/shared/context.ts +0 -50
- package/exporter/adapters/gatsby/shared/diff-assets.ts +0 -113
- package/exporter/adapters/gatsby/shared/extract-assets.ts +0 -61
- package/exporter/adapters/gatsby/shared/gatsby-build.ts +0 -54
- package/exporter/adapters/gatsby/shared/sync-render.ts +0 -277
- package/exporter/adapters/gatsby/shared/types.ts +0 -35
- package/exporter/build-esbuild.noop +0 -42
- package/exporter/commands/prepare-assets-directory.ts +0 -33
- package/exporter/services/db-class.ts +0 -54
- package/exporter/services/db.ts +0 -32
- package/exporter/types/render.ts +0 -59
- package/exporter/utils/artifacts.ts +0 -34
- package/exporter/utils/brush.ts +0 -34
- package/exporter/utils/check-health.ts +0 -79
- package/plugins/gatsby-plugin-svgr-loader/gatsby-node.js +0 -55
- package/plugins/gatsby-plugin-svgr-loader/package.json +0 -8
- /package/{react → exporter/react}/Favicon/utils.ts +0 -0
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import type { PostSearchInfoResponse } from "../types/api";
|
|
2
|
+
import type {
|
|
3
|
+
AIEmbeddingsResponse,
|
|
4
|
+
PostSearchInfoProps,
|
|
5
|
+
} from "../types/global";
|
|
6
|
+
|
|
7
|
+
import fs from "node:fs";
|
|
8
|
+
import path from "node:path";
|
|
9
|
+
|
|
10
|
+
import { post } from "./api";
|
|
11
|
+
import { getConfig } from "./core-utils";
|
|
12
|
+
import { getBuildPagesFromCachedStore } from "./store";
|
|
13
|
+
import { endpoints } from "../constants";
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Save in the BBDD the content of a page parsed without HTML tags.
|
|
17
|
+
*
|
|
18
|
+
* @param props Object with parts of the final page object to be saved in the BBDD.
|
|
19
|
+
*/
|
|
20
|
+
async function postSearchInfo(props: PostSearchInfoProps) {
|
|
21
|
+
const {
|
|
22
|
+
title,
|
|
23
|
+
description,
|
|
24
|
+
image,
|
|
25
|
+
pageId,
|
|
26
|
+
languageId,
|
|
27
|
+
siteId,
|
|
28
|
+
url,
|
|
29
|
+
content,
|
|
30
|
+
template,
|
|
31
|
+
} = props;
|
|
32
|
+
|
|
33
|
+
const response = await post<PostSearchInfoResponse>({
|
|
34
|
+
endpoint: endpoints.SEARCH,
|
|
35
|
+
body: {
|
|
36
|
+
title,
|
|
37
|
+
description,
|
|
38
|
+
image,
|
|
39
|
+
pageId,
|
|
40
|
+
languageId,
|
|
41
|
+
siteId,
|
|
42
|
+
url,
|
|
43
|
+
template,
|
|
44
|
+
content,
|
|
45
|
+
},
|
|
46
|
+
useApiCacheDir: false,
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
return response;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Remove the every cntent inside some HTML tags including them.
|
|
54
|
+
*
|
|
55
|
+
* @param content A string with the content.
|
|
56
|
+
*/
|
|
57
|
+
function prepareHTMLContentForSearch(content: string): string {
|
|
58
|
+
// 1. Remove script, style, and other unwanted block tags and their content.
|
|
59
|
+
// The regex looks for <tag...>...</tag> where tag is one of the specified ones.
|
|
60
|
+
const tagsToRemove = [
|
|
61
|
+
"meta",
|
|
62
|
+
"link",
|
|
63
|
+
"style",
|
|
64
|
+
"script",
|
|
65
|
+
"noscript",
|
|
66
|
+
"nav",
|
|
67
|
+
"header",
|
|
68
|
+
"footer",
|
|
69
|
+
];
|
|
70
|
+
const removeTagsRegex = new RegExp(
|
|
71
|
+
`<(${tagsToRemove.join("|")})\\b[^>]*>.*?<\\/\\1>`,
|
|
72
|
+
"gis",
|
|
73
|
+
);
|
|
74
|
+
let processedContent = content.replace(removeTagsRegex, "");
|
|
75
|
+
|
|
76
|
+
// 2. Strip all remaining HTML tags.
|
|
77
|
+
processedContent = processedContent.replace(/<[^>]+>/g, " ");
|
|
78
|
+
|
|
79
|
+
// 3. Normalize whitespace: replace multiple spaces/newlines with a single space and trim.
|
|
80
|
+
processedContent = processedContent.replace(/\s+/g, " ").trim();
|
|
81
|
+
|
|
82
|
+
return processedContent;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Function that search in the `/public` dir the content info of the pages and
|
|
87
|
+
* send it to the search table in the ddbb using the API.
|
|
88
|
+
*/
|
|
89
|
+
async function uploadRenderedSearchContentToAPI(
|
|
90
|
+
distDomainPath: string,
|
|
91
|
+
domain: string,
|
|
92
|
+
) {
|
|
93
|
+
const config = getConfig();
|
|
94
|
+
const { __cache } = config.paths(domain);
|
|
95
|
+
|
|
96
|
+
// Extraemos el path de la carpeta store dentro de un dominio
|
|
97
|
+
const storeFolder = path.join(__cache, "store");
|
|
98
|
+
|
|
99
|
+
// Este caso sería que el dominio existe en la instancia pero no hay sites
|
|
100
|
+
// renderizardos bajo el mismo. Por lo que `store` no existe.
|
|
101
|
+
if (!fs.existsSync(storeFolder)) {
|
|
102
|
+
console.log(
|
|
103
|
+
`Skipping uploading content to the search endpoint for the domain ${domain}, it has not exported sites.`,
|
|
104
|
+
);
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// Obtenemos las páginas del store cacheado de un dominio
|
|
109
|
+
const storePages = getBuildPagesFromCachedStore(domain);
|
|
110
|
+
|
|
111
|
+
for await (const store of storePages) {
|
|
112
|
+
const {
|
|
113
|
+
context: { page, openGraph, pageMetadata },
|
|
114
|
+
} = store;
|
|
115
|
+
|
|
116
|
+
const { compose } = page.fullPath;
|
|
117
|
+
|
|
118
|
+
const contextPath = path.resolve(`${distDomainPath}/${compose}/index.html`);
|
|
119
|
+
|
|
120
|
+
const content = fs.readFileSync(contextPath).toString();
|
|
121
|
+
|
|
122
|
+
const pageObject: PostSearchInfoProps = {
|
|
123
|
+
siteId: page.site,
|
|
124
|
+
pageId: page.id,
|
|
125
|
+
// `pageMetadata.title` has already a fallback `metatitle ||
|
|
126
|
+
// pageTitle` so probably `title` never will be take the
|
|
127
|
+
// `openGraph?.title` value. Only when the `metatitle` and
|
|
128
|
+
// `pageTitle` are empty.
|
|
129
|
+
title: pageMetadata?.title || openGraph?.title,
|
|
130
|
+
languageId: page.language,
|
|
131
|
+
url: page.fullUrl,
|
|
132
|
+
template: page.template.templateType || page.templateId,
|
|
133
|
+
description: pageMetadata?.description || openGraph?.description,
|
|
134
|
+
image: openGraph.image,
|
|
135
|
+
content: prepareHTMLContentForSearch(content),
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
await postSearchInfo(pageObject);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
async function startAIEmbeddings() {
|
|
143
|
+
try {
|
|
144
|
+
await post<AIEmbeddingsResponse>({
|
|
145
|
+
endpoint: endpoints.AI_EMBEDDINGS,
|
|
146
|
+
useApiCacheDir: false,
|
|
147
|
+
});
|
|
148
|
+
} catch (error) {
|
|
149
|
+
console.warn(
|
|
150
|
+
"There was an error with the ai embeddings",
|
|
151
|
+
(error as Error).message,
|
|
152
|
+
);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
export { postSearchInfo, startAIEmbeddings, uploadRenderedSearchContentToAPI };
|
package/exporter/utils/sites.ts
CHANGED
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
import type { Site, SiteData } from "../types/sites";
|
|
2
2
|
|
|
3
|
-
import fsp from "node:fs/promises";
|
|
4
3
|
import path from "node:path";
|
|
5
4
|
|
|
6
|
-
import
|
|
5
|
+
import fs from "fs-extra";
|
|
6
|
+
import { parse } from "js2xmlparser";
|
|
7
7
|
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
GRIDDO_RENDER_SITE,
|
|
13
|
-
} from "../constants/envs";
|
|
8
|
+
import { envs } from "../constants";
|
|
9
|
+
import { getConfig } from "./core-utils";
|
|
10
|
+
import { buildLog, verboseLog } from "./loggin";
|
|
11
|
+
import { getBuildMetadata } from "./store";
|
|
14
12
|
import { AuthService } from "../services/auth";
|
|
15
13
|
import {
|
|
16
14
|
endSiteRender,
|
|
@@ -21,28 +19,31 @@ import {
|
|
|
21
19
|
getSiteSocials,
|
|
22
20
|
startSiteRender,
|
|
23
21
|
} from "../services/sites";
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
import { getRenderMetadataFromDB, getRenderPathsFromDB } from "./render";
|
|
27
|
-
import { getBuildMetadata } from "./store";
|
|
22
|
+
|
|
23
|
+
const config = getConfig();
|
|
28
24
|
|
|
29
25
|
/**
|
|
30
26
|
* Check the instance sites and returns site prepared to be published and unpublished.
|
|
31
27
|
*/
|
|
32
28
|
async function getSitesToRender(domain: string) {
|
|
33
|
-
console.info(`API URL ${GRIDDO_API_URL as string}`);
|
|
29
|
+
console.info(`API URL ${envs.GRIDDO_API_URL as string}`);
|
|
34
30
|
|
|
35
31
|
// Login to API
|
|
36
|
-
|
|
32
|
+
await AuthService.login();
|
|
37
33
|
|
|
38
34
|
// Get all sites. An array of Site
|
|
39
35
|
const allSites = await getAllSites(domain);
|
|
40
36
|
|
|
41
37
|
// Filter the array of sites to get only the ones to build/render
|
|
42
|
-
const validSites = GRIDDO_RENDER_ALL_SITES
|
|
43
|
-
? allSites.filter(
|
|
38
|
+
const validSites = envs.GRIDDO_RENDER_ALL_SITES
|
|
39
|
+
? allSites.filter(
|
|
40
|
+
(site) =>
|
|
41
|
+
!envs.GRIDDO_RENDER_SITE || site.id === envs.GRIDDO_RENDER_SITE,
|
|
42
|
+
)
|
|
44
43
|
: allSites.filter((site) =>
|
|
45
|
-
|
|
44
|
+
envs.GRIDDO_RENDER_SITE
|
|
45
|
+
? site.id === envs.GRIDDO_RENDER_SITE
|
|
46
|
+
: !!site.shouldBeUpdated,
|
|
46
47
|
);
|
|
47
48
|
|
|
48
49
|
// If there are valid sites...
|
|
@@ -57,7 +58,8 @@ async function getSitesToRender(domain: string) {
|
|
|
57
58
|
site.domains = items
|
|
58
59
|
.filter(
|
|
59
60
|
(item) =>
|
|
60
|
-
item.domain &&
|
|
61
|
+
item.domain &&
|
|
62
|
+
(item.domain.slug === domain || item.domain.slug === `/${domain}`),
|
|
61
63
|
)
|
|
62
64
|
.map((item) => ({ [item.id]: `${item.domain.slug}${item.path}` }));
|
|
63
65
|
}
|
|
@@ -65,11 +67,15 @@ async function getSitesToRender(domain: string) {
|
|
|
65
67
|
|
|
66
68
|
// Save sites object to publish
|
|
67
69
|
const sitesToPublish = validSites.filter((site) =>
|
|
68
|
-
|
|
70
|
+
envs.GRIDDO_RENDER_SITE
|
|
71
|
+
? site.id === envs.GRIDDO_RENDER_SITE
|
|
72
|
+
: !!site.isPublished,
|
|
69
73
|
);
|
|
70
74
|
|
|
71
75
|
// Save sites object to unpublish
|
|
72
|
-
const sitesToUnpublish = validSites.filter(
|
|
76
|
+
const sitesToUnpublish = validSites.filter(
|
|
77
|
+
(site) => !site.isPublished && site.shouldBeUpdated,
|
|
78
|
+
);
|
|
73
79
|
|
|
74
80
|
return {
|
|
75
81
|
sitesToPublish,
|
|
@@ -84,7 +90,7 @@ async function getSitesToRender(domain: string) {
|
|
|
84
90
|
* @see https://griddoio.notion.site/Sites-d7bb0b7cb8d24894a5337e1139fc3d09#2019d3255bda4d219c7e19cf28d0c4fe
|
|
85
91
|
*/
|
|
86
92
|
async function unpublishSites(sites: Array<Site>) {
|
|
87
|
-
const {
|
|
93
|
+
const { __cx } = config.paths();
|
|
88
94
|
|
|
89
95
|
for (const site of sites) {
|
|
90
96
|
// API
|
|
@@ -101,8 +107,7 @@ async function unpublishSites(sites: Array<Site>) {
|
|
|
101
107
|
|
|
102
108
|
// STORE
|
|
103
109
|
// Remove site directory from the Store
|
|
104
|
-
|
|
105
|
-
await fsp.rm(path.join(__root, "store", site.id.toString()), {
|
|
110
|
+
fs.rmSync(path.join(__cx, "store", site.id.toString()), {
|
|
106
111
|
force: true,
|
|
107
112
|
recursive: true,
|
|
108
113
|
});
|
|
@@ -125,8 +130,8 @@ async function getSiteData(siteID: number) {
|
|
|
125
130
|
|
|
126
131
|
const { siteHash, unpublishHashes, publishIds } = buildData;
|
|
127
132
|
const { headers, footers } = siteInfo;
|
|
128
|
-
const validPagesIds = GRIDDO_RENDER_PAGES.length
|
|
129
|
-
? GRIDDO_RENDER_PAGES.filter((item) => publishIds.includes(item))
|
|
133
|
+
const validPagesIds = envs.GRIDDO_RENDER_PAGES.length
|
|
134
|
+
? envs.GRIDDO_RENDER_PAGES.filter((item) => publishIds.includes(item))
|
|
130
135
|
: publishIds;
|
|
131
136
|
|
|
132
137
|
const siteData: SiteData = {
|
|
@@ -147,12 +152,14 @@ async function getSiteData(siteID: number) {
|
|
|
147
152
|
/**
|
|
148
153
|
* Save a file with the end of build process to use as `build-end` signal.
|
|
149
154
|
*/
|
|
150
|
-
async function generateBuildReport(
|
|
151
|
-
const
|
|
155
|
+
async function generateBuildReport() {
|
|
156
|
+
const { __cx } = config.paths();
|
|
157
|
+
const { buildReportFileName } = config;
|
|
158
|
+
|
|
159
|
+
const { buildProcessData } = await getBuildMetadata();
|
|
152
160
|
|
|
153
|
-
|
|
154
|
-
const
|
|
155
|
-
const { buildProcessData } = await getBuildMetadata(domain);
|
|
161
|
+
// Get the token
|
|
162
|
+
const authControl = await AuthService.login();
|
|
156
163
|
|
|
157
164
|
const buildSitesInfo = Object.keys(buildProcessData).map((siteID) => ({
|
|
158
165
|
...buildProcessData[siteID],
|
|
@@ -164,55 +171,52 @@ async function generateBuildReport(domain: string) {
|
|
|
164
171
|
sites: buildSitesInfo,
|
|
165
172
|
};
|
|
166
173
|
|
|
167
|
-
const reportFilePath = path.join(
|
|
168
|
-
|
|
169
|
-
await fsp.writeFile(reportFilePath, JSON.stringify(report));
|
|
174
|
+
const reportFilePath = path.join(__cx, "dist", buildReportFileName);
|
|
175
|
+
fs.writeFileSync(reportFilePath, JSON.stringify(report));
|
|
170
176
|
|
|
171
177
|
verboseLog(`build report saved in ${reportFilePath}`);
|
|
178
|
+
|
|
179
|
+
buildLog(`Build report saved for ${buildSitesInfo.length} site(s)`);
|
|
172
180
|
}
|
|
173
181
|
|
|
174
182
|
/**
|
|
175
183
|
* Generate sitemaps and save them into file system.
|
|
176
184
|
*/
|
|
177
|
-
async function generateSitemaps(
|
|
178
|
-
const {
|
|
179
|
-
const {
|
|
180
|
-
const distDir = path.join(
|
|
185
|
+
async function generateSitemaps() {
|
|
186
|
+
const { sitesToPublish } = await getBuildMetadata();
|
|
187
|
+
const { __cx } = config.paths();
|
|
188
|
+
const distDir = path.join(__cx, "dist");
|
|
189
|
+
|
|
181
190
|
const templateSitemapPrefix = "sitemap-";
|
|
182
191
|
|
|
183
192
|
const isGriddoSitemapFile = (file: string) =>
|
|
184
|
-
file === "sitemap.xml" ||
|
|
193
|
+
file === "sitemap.xml" ||
|
|
194
|
+
(file.startsWith(templateSitemapPrefix) && file.endsWith(".xml"));
|
|
185
195
|
|
|
186
196
|
for (const site of sitesToPublish) {
|
|
187
197
|
const { id, languages } = site;
|
|
188
198
|
|
|
189
199
|
for (const lang of languages) {
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
: {};
|
|
194
|
-
localHeaders.lang = lang.id.toString();
|
|
200
|
+
if (AuthService.headers) {
|
|
201
|
+
AuthService.headers.lang = lang.id.toString();
|
|
202
|
+
}
|
|
195
203
|
|
|
196
|
-
const response = await getSitemap(
|
|
204
|
+
const response = await getSitemap(id);
|
|
197
205
|
|
|
198
|
-
if (!response)
|
|
199
|
-
continue;
|
|
200
|
-
}
|
|
206
|
+
if (!response) continue;
|
|
201
207
|
|
|
202
|
-
const {
|
|
203
|
-
|
|
208
|
+
const {
|
|
209
|
+
items: sitemapPagesGroup,
|
|
210
|
+
url: { home, domain },
|
|
211
|
+
} = response;
|
|
204
212
|
|
|
205
|
-
if (!home)
|
|
206
|
-
continue;
|
|
207
|
-
}
|
|
213
|
+
if (!home) continue;
|
|
208
214
|
|
|
209
215
|
const domainLanguage = site.domains.find(
|
|
210
216
|
(domain) => Object.keys(domain)[0] === lang.id.toString(),
|
|
211
217
|
);
|
|
212
218
|
|
|
213
|
-
if (!domainLanguage)
|
|
214
|
-
continue;
|
|
215
|
-
}
|
|
219
|
+
if (!domainLanguage) continue;
|
|
216
220
|
|
|
217
221
|
const slug = Object.values(domainLanguage)[0];
|
|
218
222
|
const sitemaps: Array<string> = [];
|
|
@@ -220,16 +224,16 @@ async function generateSitemaps(domain: string) {
|
|
|
220
224
|
const sitemapBasePath = path.join(distDir, slug.replace(domain, ""));
|
|
221
225
|
|
|
222
226
|
/** delete every griddo sitemap file before create the new ones */
|
|
223
|
-
if (
|
|
227
|
+
if (fs.existsSync(sitemapBasePath)) {
|
|
224
228
|
try {
|
|
225
|
-
const files =
|
|
229
|
+
const files = fs.readdirSync(sitemapBasePath);
|
|
226
230
|
for (const file of files) {
|
|
227
231
|
if (isGriddoSitemapFile(file)) {
|
|
228
232
|
const filePath = path.join(sitemapBasePath, file);
|
|
229
233
|
try {
|
|
230
|
-
|
|
234
|
+
fs.unlinkSync(filePath);
|
|
231
235
|
} catch (err) {
|
|
232
|
-
console.error(`Error
|
|
236
|
+
console.error(`Error removing ${filePath}:`, err);
|
|
233
237
|
}
|
|
234
238
|
}
|
|
235
239
|
}
|
|
@@ -241,41 +245,40 @@ async function generateSitemaps(domain: string) {
|
|
|
241
245
|
for (const templateId of sitemapPageGroupKeys) {
|
|
242
246
|
const sitemapPages = sitemapPagesGroup[templateId];
|
|
243
247
|
|
|
244
|
-
if (!sitemapPages.length)
|
|
245
|
-
continue;
|
|
246
|
-
}
|
|
248
|
+
if (!sitemapPages.length) continue;
|
|
247
249
|
|
|
248
|
-
const siteMap =
|
|
249
|
-
|
|
250
|
+
const siteMap = parse("urlset", {
|
|
251
|
+
"@": {
|
|
250
252
|
xmlns: "http://www.sitemaps.org/schemas/sitemap/0.9",
|
|
251
253
|
"xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance",
|
|
252
254
|
"xsi:schemaLocation":
|
|
253
|
-
"http://www.sitemaps.org/schemas/sitemap/0.9 "
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
.end({ prettyPrint: true });
|
|
255
|
+
"http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd",
|
|
256
|
+
},
|
|
257
|
+
url: sitemapPages,
|
|
258
|
+
});
|
|
258
259
|
|
|
259
260
|
const sitemapName = `/${templateSitemapPrefix}${templateId.toLowerCase()}.xml`;
|
|
260
261
|
const exactPath = path.join(sitemapBasePath, sitemapName);
|
|
261
262
|
|
|
262
|
-
|
|
263
|
+
saveFile(exactPath, siteMap);
|
|
263
264
|
|
|
264
|
-
sitemaps.push(
|
|
265
|
+
sitemaps.push(
|
|
266
|
+
`${home.endsWith("/") ? home.slice(0, -1) : home}${sitemapName}`,
|
|
267
|
+
);
|
|
265
268
|
}
|
|
266
269
|
|
|
267
270
|
if (!sitemaps.length) {
|
|
268
271
|
continue;
|
|
269
272
|
}
|
|
270
273
|
|
|
271
|
-
const siteMap =
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
274
|
+
const siteMap = parse("sitemapindex", {
|
|
275
|
+
"@": { xmlns: "http://www.sitemaps.org/schemas/sitemap/0.9" },
|
|
276
|
+
sitemap: sitemaps.map((loc) => ({ loc })),
|
|
277
|
+
});
|
|
275
278
|
|
|
276
279
|
const exactPath = path.join(sitemapBasePath, "sitemap.xml");
|
|
277
280
|
|
|
278
|
-
|
|
281
|
+
saveFile(exactPath, siteMap);
|
|
279
282
|
verboseLog(`sitemap generated in ${exactPath}`);
|
|
280
283
|
}
|
|
281
284
|
}
|
|
@@ -287,17 +290,23 @@ async function generateSitemaps(domain: string) {
|
|
|
287
290
|
* @param filePath The path of the file to save the content to.
|
|
288
291
|
* @param content The content to save to the file.
|
|
289
292
|
*/
|
|
290
|
-
|
|
293
|
+
function saveFile(filePath: string, content: string) {
|
|
291
294
|
try {
|
|
292
295
|
const pathName = path.dirname(filePath);
|
|
293
|
-
if (!(
|
|
294
|
-
|
|
296
|
+
if (!fs.existsSync(pathName)) {
|
|
297
|
+
fs.mkdirSync(pathName, { recursive: true });
|
|
295
298
|
}
|
|
296
|
-
|
|
299
|
+
fs.writeFileSync(filePath, content);
|
|
297
300
|
} catch (error) {
|
|
298
301
|
console.log(error);
|
|
299
302
|
throw new Error(`Error saving a file`);
|
|
300
303
|
}
|
|
301
304
|
}
|
|
302
305
|
|
|
303
|
-
export {
|
|
306
|
+
export {
|
|
307
|
+
generateBuildReport,
|
|
308
|
+
generateSitemaps,
|
|
309
|
+
getSiteData,
|
|
310
|
+
getSitesToRender,
|
|
311
|
+
unpublishSites,
|
|
312
|
+
};
|