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