@griddo/cx 11.7.7-rc.0 → 11.7.7-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 -67
- 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 -24
- 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 -79
- 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 -210
- 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 -81
- 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 -276
- 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,11 @@
|
|
|
1
|
+
import { execSync } from "node:child_process";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
|
|
4
|
+
const domainName = "pro-griddo";
|
|
5
|
+
const domainPath = path.resolve(
|
|
6
|
+
__dirname,
|
|
7
|
+
`../../../exports/sites/${domainName}`,
|
|
8
|
+
);
|
|
9
|
+
|
|
10
|
+
execSync(`mkdir -p ${domainPath}/assets/${domainName}`);
|
|
11
|
+
execSync(`cp -R ${domainPath}/assets/* ${domainPath}/assets/${domainName}`);
|
|
@@ -1,159 +1,46 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import type { RenderDB } from "../types/render";
|
|
4
|
-
|
|
5
|
-
import fsp from "node:fs/promises";
|
|
1
|
+
import fs from "node:fs";
|
|
6
2
|
import path from "node:path";
|
|
7
3
|
|
|
8
|
-
import {
|
|
9
|
-
import { AuthService } from "../services/auth";
|
|
10
|
-
import { readDB, writeDB } from "../services/db";
|
|
4
|
+
import { getConfig } from "../utils/core-utils";
|
|
11
5
|
import { getInstanceDomains } from "../utils/domains";
|
|
12
|
-
import {
|
|
13
|
-
import { resolveComponentsPath } from "../utils/instance";
|
|
14
|
-
import { showExporterVersion } from "../utils/loggin";
|
|
15
|
-
import { resolveDomainRenderMode } from "../utils/render";
|
|
6
|
+
import { infoLog, successLog } from "../utils/loggin";
|
|
16
7
|
import { getSitesToRender } from "../utils/sites";
|
|
17
8
|
|
|
18
|
-
async
|
|
19
|
-
|
|
20
|
-
domains.map(async (domain) => {
|
|
21
|
-
// Get the sites to render for the domain
|
|
22
|
-
const { sitesToPublish, sitesToUnpublish } = await getSitesToRender(domain);
|
|
23
|
-
|
|
24
|
-
// Only count pages (offlinePending && publishPending) if sitesToPublish
|
|
25
|
-
// is not empty. Otherwise we set the domain has having 0 pages.
|
|
26
|
-
const pages: Array<number> = [];
|
|
27
|
-
|
|
28
|
-
if (sitesToPublish.length > 0) {
|
|
29
|
-
for (const site of sitesToPublish) {
|
|
30
|
-
// el site ya está publicado
|
|
31
|
-
if (site.isPublished && !site.shouldBeUpdated) {
|
|
32
|
-
const { pagesStatus } = site;
|
|
33
|
-
const { offlinePending, uploadPending } = pagesStatus;
|
|
34
|
-
const total = offlinePending.length + uploadPending.length;
|
|
35
|
-
pages.push(total);
|
|
36
|
-
}
|
|
37
|
-
// el site esta pendiente de publicar
|
|
38
|
-
if (site.isPublished && site.shouldBeUpdated) {
|
|
39
|
-
const { pagesStatus } = site;
|
|
40
|
-
const { offlinePending, uploadPending, active } = pagesStatus;
|
|
41
|
-
const total = offlinePending.length + uploadPending.length + active.length;
|
|
42
|
-
pages.push(total);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
} else if (sitesToUnpublish.length > 0) {
|
|
46
|
-
// si tiene sites para despublicar marcamos el dominio como que tiene 1 página
|
|
47
|
-
pages.push(1);
|
|
48
|
-
} else {
|
|
49
|
-
// si eldominio no tiene nada ni para publicar ni despublicar lomarcamos como 0
|
|
50
|
-
pages.push(0);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
const totalPages = pages.reduce((a, b) => a + b);
|
|
54
|
-
|
|
55
|
-
return { domain, totalPages };
|
|
56
|
-
}),
|
|
57
|
-
);
|
|
58
|
-
|
|
59
|
-
return results;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
function getDomainsSortedByNumberOfPages(
|
|
63
|
-
domainsInfo: Array<{
|
|
64
|
-
domain: string;
|
|
65
|
-
totalPages: number;
|
|
66
|
-
}>,
|
|
67
|
-
) {
|
|
68
|
-
domainsInfo.sort((a, b) => a.totalPages - b.totalPages);
|
|
69
|
-
|
|
70
|
-
return domainsInfo.map(({ domain }) => domain);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
async function initRender() {
|
|
74
|
-
const root = (await pkgDir({ cwd: path.resolve(__dirname, "../../..") })) || "";
|
|
75
|
-
const cx = root;
|
|
76
|
-
const ssg = path.resolve((await pkgDir({ cwd: __dirname })) || "");
|
|
77
|
-
const cxCache = path.resolve(root, ".cx-cache");
|
|
78
|
-
const components = resolveComponentsPath();
|
|
79
|
-
const exportsDir = path.join(root, "exports/sites");
|
|
9
|
+
(async () => {
|
|
10
|
+
infoLog("Checking domains size");
|
|
80
11
|
|
|
81
|
-
const
|
|
82
|
-
proDomain: "pro-",
|
|
83
|
-
griddoVersion,
|
|
84
|
-
buildReportFileName: "build-report.json",
|
|
85
|
-
sortedDomains: [],
|
|
86
|
-
domains: {},
|
|
87
|
-
paths: {
|
|
88
|
-
components,
|
|
89
|
-
cx,
|
|
90
|
-
cxCache,
|
|
91
|
-
exportsDir,
|
|
92
|
-
root,
|
|
93
|
-
ssg,
|
|
94
|
-
},
|
|
95
|
-
};
|
|
12
|
+
const { __cx } = getConfig().paths();
|
|
96
13
|
|
|
97
|
-
// create the main cache folder for cx if it doesn't exist.
|
|
98
|
-
if (!(await pathExists(cxCache))) {
|
|
99
|
-
await fsp.mkdir(cxCache, { recursive: true });
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
await writeDB(data);
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
async function prepareDomains() {
|
|
106
|
-
await AuthService.login();
|
|
107
|
-
|
|
108
|
-
const db = await readDB();
|
|
109
|
-
|
|
110
|
-
const __ssg = db.paths.ssg;
|
|
111
14
|
const domains = await getInstanceDomains();
|
|
112
|
-
const
|
|
113
|
-
const
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
}
|
|
15
|
+
const domainsInfo = [];
|
|
16
|
+
const domainsFilePath = path.join(__cx, "domains.json");
|
|
17
|
+
|
|
18
|
+
for (const domain of domains) {
|
|
19
|
+
const { sitesToPublish } = await getSitesToRender(domain);
|
|
20
|
+
|
|
21
|
+
// Only count pages (changedPages) if sitesToPublish is not empty.
|
|
22
|
+
// Otherwise we set the domain has having 0 pages.
|
|
23
|
+
const pages = [];
|
|
24
|
+
if (sitesToPublish.length > 0) {
|
|
25
|
+
for (const site of sitesToPublish) {
|
|
26
|
+
pages.push(site.changedPages.length);
|
|
27
|
+
}
|
|
28
|
+
} else {
|
|
29
|
+
pages.push(0);
|
|
30
|
+
}
|
|
128
31
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
db.domains[domain].shouldBeRendered = shouldBeRendered;
|
|
132
|
-
db.domains[domain].renderModeReason = reason;
|
|
32
|
+
const totalPages = pages.reduce((a, b) => a + b);
|
|
33
|
+
domainsInfo.push({ domain, totalPages });
|
|
133
34
|
}
|
|
134
35
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
async function clean() {
|
|
139
|
-
const db = await readDB();
|
|
140
|
-
const { root: __root } = db.paths;
|
|
141
|
-
await removeDirs([path.join(__root, "apiCache")]);
|
|
142
|
-
}
|
|
36
|
+
// sort domains, smaller first
|
|
37
|
+
domainsInfo.sort((a, b) => a.totalPages - b.totalPages);
|
|
38
|
+
const domainSorted = domainsInfo.map(({ domain }) => domain);
|
|
143
39
|
|
|
144
|
-
|
|
145
|
-
* Prepare domains to render.
|
|
146
|
-
* It creates a `domains.json` file with the sorted list of domains and writes a
|
|
147
|
-
* `RENDE-STATE.json` file to persist a state between all cx-infra commands.
|
|
148
|
-
*/
|
|
149
|
-
async function main() {
|
|
150
|
-
await showExporterVersion();
|
|
151
|
-
await initRender();
|
|
152
|
-
await prepareDomains();
|
|
153
|
-
await clean();
|
|
154
|
-
}
|
|
40
|
+
fs.writeFileSync(domainsFilePath, JSON.stringify(domainSorted));
|
|
155
41
|
|
|
156
|
-
|
|
157
|
-
|
|
42
|
+
successLog(`Checking domains size`);
|
|
43
|
+
})().catch((err) => {
|
|
44
|
+
console.error(err);
|
|
158
45
|
process.exit(1);
|
|
159
46
|
});
|
|
@@ -1,20 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
import { RESET_RENDER } from "../constants/endpoints";
|
|
4
3
|
import { AuthService } from "../services/auth";
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
async function resetRender() {
|
|
8
|
-
await post({
|
|
9
|
-
endpoint: RESET_RENDER,
|
|
10
|
-
useApiCacheDir: false,
|
|
11
|
-
});
|
|
12
|
-
}
|
|
4
|
+
import { resetRender } from "../services/settings";
|
|
13
5
|
|
|
14
6
|
async function main() {
|
|
15
7
|
await AuthService.login();
|
|
16
8
|
await resetRender();
|
|
17
|
-
console.log(`The render status has been reset.`);
|
|
18
9
|
}
|
|
19
10
|
|
|
20
11
|
main().catch((err) => {
|
|
@@ -1,47 +1,68 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
import { AuthService } from "../services/auth";
|
|
5
|
-
import { brush } from "../utils/brush";
|
|
6
|
-
import { checkHealth } from "../utils/check-health";
|
|
2
|
+
import { renderDomainsWithGatsbyAdapter } from "../adapters/gatsby";
|
|
3
|
+
import { RenderError } from "../errors";
|
|
7
4
|
import { getInstanceDomains } from "../utils/domains";
|
|
8
|
-
import {
|
|
5
|
+
import { errorLabelLog, showExporterVersion } from "../utils/loggin";
|
|
6
|
+
import { sendGriddoDefaultAlerts } from "../utils/render";
|
|
9
7
|
|
|
10
|
-
const
|
|
8
|
+
const GRIDDO_RENDER_DOMAINS = process.env.GRIDDO_RENDER_DOMAINS || "";
|
|
9
|
+
const RENDER_BY_DOMAIN = process.env.GRIDDO_RENDER_BY_DOMAINS || "";
|
|
11
10
|
|
|
12
11
|
async function startRender() {
|
|
13
12
|
try {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
// DOMAINS
|
|
14
|
+
// This block is just for the local instance renders.
|
|
15
|
+
if (GRIDDO_RENDER_DOMAINS) {
|
|
16
|
+
console.log("USANDO EL .ENV");
|
|
17
|
+
showExporterVersion();
|
|
18
|
+
for (const domain of GRIDDO_RENDER_DOMAINS.split(",")) {
|
|
19
|
+
await renderDomainsWithGatsbyAdapter(domain);
|
|
20
|
+
}
|
|
21
|
+
await sendGriddoDefaultAlerts();
|
|
22
|
+
process.exit(0);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// This will render every domain opposed to the new logic of render each
|
|
26
|
+
// domain separately.
|
|
27
|
+
if (RENDER_BY_DOMAIN) {
|
|
28
|
+
const domain = process.argv.splice(2)[0];
|
|
29
|
+
|
|
30
|
+
if (!domain) {
|
|
31
|
+
console.log("Needs the domain name argument");
|
|
32
|
+
throw new RenderError();
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
showExporterVersion();
|
|
36
|
+
await renderDomainsWithGatsbyAdapter(domain);
|
|
37
|
+
await sendGriddoDefaultAlerts();
|
|
38
|
+
|
|
39
|
+
process.exit(0);
|
|
17
40
|
} else {
|
|
18
|
-
|
|
41
|
+
showExporterVersion();
|
|
42
|
+
|
|
43
|
+
console.log("( Legacy Render Mode )\n");
|
|
44
|
+
|
|
19
45
|
const domains = await getInstanceDomains();
|
|
46
|
+
|
|
20
47
|
for (const domain of domains) {
|
|
21
|
-
await
|
|
48
|
+
await renderDomainsWithGatsbyAdapter(domain);
|
|
49
|
+
await sendGriddoDefaultAlerts();
|
|
22
50
|
}
|
|
51
|
+
process.exit(0);
|
|
23
52
|
}
|
|
24
|
-
|
|
25
|
-
return;
|
|
26
53
|
} catch (error) {
|
|
27
54
|
if (error instanceof RenderError) {
|
|
28
|
-
|
|
55
|
+
errorLabelLog("GRIDDO_ERROR InternalCXError");
|
|
29
56
|
process.exit(1);
|
|
30
57
|
}
|
|
31
58
|
|
|
32
|
-
|
|
59
|
+
errorLabelLog("GRIDDO_ERROR UnknownError");
|
|
33
60
|
console.error(error);
|
|
34
61
|
process.exit(1);
|
|
35
62
|
}
|
|
36
63
|
}
|
|
37
64
|
|
|
38
|
-
|
|
39
|
-
checkHealth();
|
|
40
|
-
await AuthService.login();
|
|
41
|
-
await startRender();
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
main().catch((err) => {
|
|
65
|
+
startRender().catch((err) => {
|
|
45
66
|
console.error("Error", err?.stdout?.toString() || err);
|
|
46
67
|
process.exit(1);
|
|
47
68
|
});
|
|
@@ -1,212 +1,38 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
import
|
|
4
|
-
import type { PostSearchInfoResponse } from "../types/api";
|
|
5
|
-
import type { AIEmbeddingsResponse, PostSearchInfoProps } from "../types/global";
|
|
3
|
+
import fs from "node:fs";
|
|
6
4
|
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
|
|
10
|
-
import { AI_EMBEDDINGS, SEARCH } from "../constants/endpoints";
|
|
11
|
-
import { GRIDDO_AI_EMBEDDINGS, GRIDDO_SEARCH_FEATURE } from "../constants/envs";
|
|
12
|
-
import { ReadFromStoreError, UploadSearchError } from "../constants/errors";
|
|
13
|
-
import { AuthService } from "../services/auth";
|
|
14
|
-
import { post } from "../utils/api";
|
|
5
|
+
import { envs } from "../constants";
|
|
6
|
+
import { getConfig } from "../utils/core-utils";
|
|
15
7
|
import { getInstanceDomains } from "../utils/domains";
|
|
16
|
-
import {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Save in the BBDD the content of a page parsed without HTML tags.
|
|
22
|
-
*
|
|
23
|
-
* @param props Object with parts of the final page object to be saved in the BBDD.
|
|
24
|
-
*/
|
|
25
|
-
async function postSearchInfo(props: PostSearchInfoProps) {
|
|
26
|
-
const { title, description, image, pageId, languageId, siteId, url, content, template } = props;
|
|
27
|
-
|
|
28
|
-
const response = await post<PostSearchInfoResponse>({
|
|
29
|
-
endpoint: SEARCH,
|
|
30
|
-
body: {
|
|
31
|
-
title,
|
|
32
|
-
description,
|
|
33
|
-
image,
|
|
34
|
-
pageId,
|
|
35
|
-
languageId,
|
|
36
|
-
siteId,
|
|
37
|
-
url,
|
|
38
|
-
template,
|
|
39
|
-
content,
|
|
40
|
-
},
|
|
41
|
-
useApiCacheDir: false,
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
return response;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
function prepareHTMLContentForSearch(content: string): string {
|
|
48
|
-
// 1. Remove script, style, and other unwanted block tags and their content.
|
|
49
|
-
// The regex looks for <tag...>...</tag> where tag is one of the specified ones.
|
|
50
|
-
const tagsToRemove = ["meta", "link", "style", "script", "noscript", "nav", "header", "footer"];
|
|
51
|
-
const removeTagsRegex = new RegExp(`<(${tagsToRemove.join("|")})\\b[^>]*>.*?<\\/\\1>`, "gis");
|
|
52
|
-
let processedContent = content.replace(removeTagsRegex, "");
|
|
53
|
-
|
|
54
|
-
// 2. Strip all remaining HTML tags.
|
|
55
|
-
processedContent = processedContent.replace(/<[^>]+>/g, " ");
|
|
56
|
-
|
|
57
|
-
// 3. Normalize whitespace: replace multiple spaces/newlines with a single space and trim.
|
|
58
|
-
processedContent = processedContent.replace(/\s+/g, " ").trim();
|
|
59
|
-
|
|
60
|
-
return processedContent;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* Function that search in the `/public` dir the content info of the pages and
|
|
65
|
-
* send it to the search table in the ddbb using the API.
|
|
66
|
-
* @todo Utilizar la carpeta page-data en lugar de la carpeta store puesto que
|
|
67
|
-
* esta ya no es persistente.
|
|
68
|
-
*/
|
|
69
|
-
async function uploadRenderedSearchContentToAPI(options: {
|
|
70
|
-
htmlContentDir: string;
|
|
71
|
-
jsonContentDir: string;
|
|
72
|
-
}) {
|
|
73
|
-
const { htmlContentDir, jsonContentDir } = options;
|
|
74
|
-
|
|
75
|
-
if (!(await pathExists(jsonContentDir)) || !(await pathExists(htmlContentDir))) {
|
|
76
|
-
console.log(
|
|
77
|
-
`Skipping uploading content to the search endpoint because it has not exported sites.`,
|
|
78
|
-
);
|
|
8
|
+
import {
|
|
9
|
+
startAIEmbeddings,
|
|
10
|
+
uploadRenderedSearchContentToAPI,
|
|
11
|
+
} from "../utils/searches";
|
|
79
12
|
|
|
13
|
+
async function main() {
|
|
14
|
+
if (!envs.GRIDDO_SEARCH_FEATURE) {
|
|
80
15
|
return;
|
|
81
16
|
}
|
|
82
17
|
|
|
83
|
-
|
|
84
|
-
const
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
const { result } = pageData;
|
|
88
|
-
const { pageContext } = result;
|
|
89
|
-
const { page, openGraph, pageMetadata } = pageContext;
|
|
90
|
-
|
|
91
|
-
const { compose } = page.fullPath;
|
|
18
|
+
const domains = await getInstanceDomains();
|
|
19
|
+
const config = getConfig();
|
|
20
|
+
for (const domain of domains) {
|
|
21
|
+
const { __exports_dist } = config.paths(domain);
|
|
92
22
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
siteId: page.site,
|
|
98
|
-
pageId: page.id,
|
|
99
|
-
// `pageMetadata.title` has already a fallback `metatitle ||
|
|
100
|
-
// pageTitle` so probably `title` never will be take the
|
|
101
|
-
// `openGraph?.title` value. Only when the `metatitle` and
|
|
102
|
-
// `pageTitle` are empty.
|
|
103
|
-
title: pageMetadata?.title || openGraph?.title,
|
|
104
|
-
languageId: page.language,
|
|
105
|
-
url: page.fullUrl,
|
|
106
|
-
template: page.template.templateType || page.templateId,
|
|
107
|
-
description: pageMetadata?.description || openGraph?.description,
|
|
108
|
-
image: openGraph.image,
|
|
109
|
-
// _content: prepareHTMLContentForSearch(htmlContent),
|
|
110
|
-
content: prepareHTMLContentForSearch(htmlContent),
|
|
111
|
-
};
|
|
112
|
-
|
|
113
|
-
try {
|
|
114
|
-
await postSearchInfo(pageObject);
|
|
115
|
-
} catch (error) {
|
|
116
|
-
throwError(UploadSearchError, error);
|
|
23
|
+
// If __exports_dist has not exported sites (directories), it does not
|
|
24
|
+
// upload search content.
|
|
25
|
+
if (fs.existsSync(__exports_dist)) {
|
|
26
|
+
await uploadRenderedSearchContentToAPI(__exports_dist, domain);
|
|
117
27
|
}
|
|
118
28
|
}
|
|
119
|
-
}
|
|
120
29
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
*
|
|
125
|
-
* @param basePath The path to walk recursively.
|
|
126
|
-
* @returns An array of pages with json extension with the full absolute path
|
|
127
|
-
* and the path includes "page-data".
|
|
128
|
-
*/
|
|
129
|
-
async function* walkRecursively(basePath: string): AsyncGenerator<string> {
|
|
130
|
-
const filesHandle = await fsp.opendir(basePath);
|
|
131
|
-
|
|
132
|
-
for await (const fileDirent of filesHandle) {
|
|
133
|
-
if (fileDirent.isDirectory()) {
|
|
134
|
-
yield* walkRecursively(path.join(basePath, fileDirent.name));
|
|
135
|
-
} else if (
|
|
136
|
-
fileDirent.isFile() &&
|
|
137
|
-
path.extname(fileDirent.name) === ".json" &&
|
|
138
|
-
fileDirent.name.includes("page-data")
|
|
139
|
-
) {
|
|
140
|
-
yield path.join(basePath, fileDirent.name);
|
|
141
|
-
}
|
|
30
|
+
// Solo una vez en cada render de todos los dominios...
|
|
31
|
+
if (envs.GRIDDO_AI_EMBEDDINGS) {
|
|
32
|
+
await startAIEmbeddings();
|
|
142
33
|
}
|
|
143
34
|
}
|
|
144
35
|
|
|
145
|
-
/**
|
|
146
|
-
* Walk recursively in a basePath and return an array of pages with json
|
|
147
|
-
* extension with the full absolute path and the path includes "page-data".
|
|
148
|
-
*
|
|
149
|
-
* @param basePath The path to walk recursively.
|
|
150
|
-
* @returns An array of pages with json extension with the full absolute path
|
|
151
|
-
* and the path includes "page-data".
|
|
152
|
-
*/
|
|
153
|
-
async function* getPageDataPagesFromExports<PageType extends GatsbyPageData>(
|
|
154
|
-
basePath: string,
|
|
155
|
-
): AsyncGenerator<PageType> {
|
|
156
|
-
const jsonFiles = walkRecursively(basePath);
|
|
157
|
-
|
|
158
|
-
for await (const filePath of jsonFiles) {
|
|
159
|
-
try {
|
|
160
|
-
const fileContent = await fsp.readFile(filePath, "utf8");
|
|
161
|
-
const page = JSON.parse(fileContent) as PageType;
|
|
162
|
-
|
|
163
|
-
if (page.path) {
|
|
164
|
-
yield page;
|
|
165
|
-
}
|
|
166
|
-
} catch (error) {
|
|
167
|
-
throwError(ReadFromStoreError, error);
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
async function getContentDirectories(domain: string) {
|
|
173
|
-
const { __exports } = await getRenderPathsFromDB({ domain });
|
|
174
|
-
|
|
175
|
-
return {
|
|
176
|
-
htmlContentDir: path.join(__exports, "dist"),
|
|
177
|
-
jsonContentDir: path.join(__exports, "dist", "page-data"),
|
|
178
|
-
};
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
async function uploadSearchContent() {
|
|
182
|
-
if (GRIDDO_SEARCH_FEATURE) {
|
|
183
|
-
await AuthService.login();
|
|
184
|
-
const domains = await getInstanceDomains();
|
|
185
|
-
for (const domain of domains) {
|
|
186
|
-
const { htmlContentDir, jsonContentDir } = await getContentDirectories(domain);
|
|
187
|
-
await uploadRenderedSearchContentToAPI({
|
|
188
|
-
htmlContentDir,
|
|
189
|
-
jsonContentDir,
|
|
190
|
-
});
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
async function aiEmbeddings() {
|
|
196
|
-
if (GRIDDO_SEARCH_FEATURE && GRIDDO_AI_EMBEDDINGS) {
|
|
197
|
-
await AuthService.login();
|
|
198
|
-
await post<AIEmbeddingsResponse>({
|
|
199
|
-
endpoint: AI_EMBEDDINGS,
|
|
200
|
-
useApiCacheDir: false,
|
|
201
|
-
});
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
async function main() {
|
|
206
|
-
await uploadSearchContent();
|
|
207
|
-
await aiEmbeddings();
|
|
208
|
-
}
|
|
209
|
-
|
|
210
36
|
main().catch((err) => {
|
|
211
37
|
console.error("Error", err?.stdout?.toString() || err);
|
|
212
38
|
process.exit(1);
|