@griddo/cx 11.7.10 → 11.7.12-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -226
- package/build/adapters/gatsby/actions/clean.js +10 -0
- package/build/adapters/gatsby/actions/clean.js.map +1 -0
- package/build/adapters/gatsby/actions/close.js +14 -0
- package/build/adapters/gatsby/actions/close.js.map +1 -0
- package/build/adapters/gatsby/actions/data.js +18 -0
- package/build/adapters/gatsby/actions/data.js.map +1 -0
- package/build/adapters/gatsby/actions/healthCheck.js +10 -0
- package/build/adapters/gatsby/actions/healthCheck.js.map +1 -0
- package/build/adapters/gatsby/actions/init.js +22 -0
- package/build/adapters/gatsby/actions/init.js.map +1 -0
- package/build/adapters/gatsby/actions/logs.js +9 -0
- package/build/adapters/gatsby/actions/logs.js.map +1 -0
- package/build/adapters/gatsby/actions/meta.js +13 -0
- package/build/adapters/gatsby/actions/meta.js.map +1 -0
- package/build/adapters/gatsby/actions/prepare.js +9 -0
- package/build/adapters/gatsby/actions/prepare.js.map +1 -0
- package/build/adapters/gatsby/actions/relocation.js +15 -0
- package/build/adapters/gatsby/actions/relocation.js.map +1 -0
- package/build/adapters/gatsby/actions/restore.js +26 -0
- package/build/adapters/gatsby/actions/restore.js.map +1 -0
- package/build/adapters/gatsby/actions/ssg.js +9 -0
- package/build/adapters/gatsby/actions/ssg.js.map +1 -0
- package/build/adapters/gatsby/actions/sync.js +51 -0
- package/build/adapters/gatsby/actions/sync.js.map +1 -0
- package/build/adapters/gatsby/index.js +78 -0
- package/build/adapters/gatsby/index.js.map +1 -0
- package/build/adapters/gatsby/shared/artifacts.js +20 -0
- package/build/adapters/gatsby/shared/artifacts.js.map +1 -0
- package/build/adapters/gatsby/shared/context.js +31 -0
- package/build/adapters/gatsby/shared/context.js.map +1 -0
- package/build/adapters/gatsby/shared/diff-assets.js +101 -0
- package/build/adapters/gatsby/shared/diff-assets.js.map +1 -0
- package/build/adapters/gatsby/shared/extract-assets.js +58 -0
- package/build/adapters/gatsby/shared/extract-assets.js.map +1 -0
- package/build/adapters/gatsby/shared/gatsby-build.js +55 -0
- package/build/adapters/gatsby/shared/gatsby-build.js.map +1 -0
- package/build/adapters/gatsby/shared/sync-render.js +210 -0
- package/build/adapters/gatsby/shared/sync-render.js.map +1 -0
- package/build/adapters/gatsby/shared/types.js +3 -0
- package/build/adapters/gatsby/shared/types.js.map +1 -0
- package/build/commands/end-render.js +87 -0
- package/build/commands/end-render.js.map +1 -0
- package/build/commands/prepare-assets-directory.js +30 -0
- package/build/commands/prepare-assets-directory.js.map +1 -0
- package/build/commands/prepare-domains-render.js +133 -0
- package/build/commands/prepare-domains-render.js.map +1 -0
- package/build/commands/reset-render.js +21 -0
- package/build/commands/reset-render.js.map +1 -0
- package/build/commands/start-render.js +44 -0
- package/build/commands/start-render.js.map +1 -0
- package/build/commands/upload-search-content.js +180 -0
- package/build/commands/upload-search-content.js.map +1 -0
- package/build/constants/endpoints.js +43 -0
- package/build/constants/endpoints.js.map +1 -0
- package/build/constants/envs.js +68 -0
- package/build/constants/envs.js.map +1 -0
- package/build/constants/errors.js +81 -0
- package/build/constants/errors.js.map +1 -0
- package/build/services/auth.js +40 -0
- package/build/services/auth.js.map +1 -0
- package/build/services/db-class.js +49 -0
- package/build/services/db-class.js.map +1 -0
- package/build/services/db.js +34 -0
- package/build/services/db.js.map +1 -0
- package/build/services/navigation.js +96 -0
- package/build/services/navigation.js.map +1 -0
- package/build/services/reference-fields.js +131 -0
- package/build/services/reference-fields.js.map +1 -0
- package/build/services/robots.js +60 -0
- package/build/services/robots.js.map +1 -0
- package/build/services/sites.js +110 -0
- package/build/services/sites.js.map +1 -0
- package/build/services/store.js +257 -0
- package/build/services/store.js.map +1 -0
- package/build/types/api.js +3 -0
- package/build/types/api.js.map +1 -0
- package/build/types/global.js +3 -0
- package/build/types/global.js.map +1 -0
- package/build/types/navigation.js +3 -0
- package/build/types/navigation.js.map +1 -0
- package/build/types/pages.js +3 -0
- package/build/types/pages.js.map +1 -0
- package/build/types/render.js +10 -0
- package/build/types/render.js.map +1 -0
- package/build/types/sites.js +3 -0
- package/build/types/sites.js.map +1 -0
- package/build/types/templates.js +3 -0
- package/build/types/templates.js.map +1 -0
- package/build/utils/api.js +165 -0
- package/build/utils/api.js.map +1 -0
- package/build/utils/artifacts.js +38 -0
- package/build/utils/artifacts.js.map +1 -0
- package/build/utils/brush.js +30 -0
- package/build/utils/brush.js.map +1 -0
- package/build/utils/cache.js +106 -0
- package/build/utils/cache.js.map +1 -0
- package/build/utils/check-environment-health.js +69 -0
- package/build/utils/check-environment-health.js.map +1 -0
- package/build/utils/core-utils.js +270 -0
- package/build/utils/core-utils.js.map +1 -0
- package/build/utils/domains.js +37 -0
- package/build/utils/domains.js.map +1 -0
- package/build/utils/errors.js +30 -0
- package/build/utils/errors.js.map +1 -0
- package/build/utils/folders.js +341 -0
- package/build/utils/folders.js.map +1 -0
- package/build/utils/images.js +45 -0
- package/build/utils/images.js.map +1 -0
- package/build/utils/instance.js +66 -0
- package/build/utils/instance.js.map +1 -0
- package/build/utils/loggin.js +119 -0
- package/build/utils/loggin.js.map +1 -0
- package/build/utils/npm-deps/find-up-simple.js +75 -0
- package/build/utils/npm-deps/find-up-simple.js.map +1 -0
- package/build/utils/npm-deps/pkg-dir.js +20 -0
- package/build/utils/npm-deps/pkg-dir.js.map +1 -0
- package/build/utils/npm-deps/xml-parser.js +49 -0
- package/build/utils/npm-deps/xml-parser.js.map +1 -0
- package/build/utils/pages.js +359 -0
- package/build/utils/pages.js.map +1 -0
- package/build/utils/render.js +168 -0
- package/build/utils/render.js.map +1 -0
- package/build/utils/sitemaps.js +110 -0
- package/build/utils/sitemaps.js.map +1 -0
- package/build/utils/sites.js +105 -0
- package/build/utils/sites.js.map +1 -0
- package/build/utils/store.js +193 -0
- package/build/utils/store.js.map +1 -0
- package/exporter/adapters/gatsby/actions/clean.ts +14 -0
- package/exporter/adapters/gatsby/actions/close.ts +20 -0
- package/exporter/adapters/gatsby/actions/data.ts +25 -0
- package/exporter/adapters/gatsby/actions/healthCheck.ts +10 -0
- package/exporter/adapters/gatsby/actions/init.ts +26 -0
- package/exporter/adapters/gatsby/actions/logs.ts +10 -0
- package/exporter/adapters/gatsby/actions/meta.ts +16 -0
- package/exporter/adapters/gatsby/actions/prepare.ts +9 -0
- package/exporter/adapters/gatsby/actions/relocation.ts +15 -0
- package/exporter/adapters/gatsby/actions/restore.ts +36 -0
- package/exporter/adapters/gatsby/actions/ssg.ts +12 -0
- package/exporter/adapters/gatsby/actions/sync.ts +71 -0
- package/exporter/adapters/gatsby/index.ts +73 -153
- package/exporter/adapters/gatsby/shared/artifacts.ts +16 -0
- package/exporter/adapters/gatsby/shared/context.ts +50 -0
- package/exporter/adapters/gatsby/shared/diff-assets.ts +113 -0
- package/exporter/adapters/gatsby/shared/extract-assets.ts +61 -0
- package/exporter/adapters/gatsby/shared/gatsby-build.ts +58 -0
- package/exporter/adapters/gatsby/shared/sync-render.ts +276 -0
- package/exporter/adapters/gatsby/shared/types.ts +35 -0
- package/exporter/build-esbuild.noop +42 -0
- package/exporter/build.sh +4 -38
- package/exporter/commands/end-render.ts +72 -70
- package/exporter/commands/prepare-assets-directory.ts +30 -0
- package/exporter/commands/prepare-domains-render.ts +143 -31
- package/exporter/commands/reset-render.ts +10 -3
- package/exporter/commands/start-render.ts +22 -45
- package/exporter/commands/upload-search-content.ts +194 -21
- package/exporter/constants/endpoints.ts +2 -1
- package/exporter/constants/envs.ts +57 -55
- package/exporter/{errors/errors-data.ts → constants/errors.ts} +24 -14
- package/exporter/services/auth.ts +7 -6
- package/exporter/services/db-class.ts +54 -0
- package/exporter/services/db.ts +32 -0
- package/exporter/services/navigation.ts +4 -10
- package/exporter/services/reference-fields.ts +9 -24
- package/exporter/services/robots.ts +9 -16
- package/exporter/services/sites.ts +36 -24
- package/exporter/services/store.ts +107 -96
- package/exporter/types/api.ts +27 -28
- package/exporter/types/global.ts +8 -11
- package/exporter/types/navigation.ts +1 -1
- package/exporter/types/pages.ts +2 -3
- package/exporter/types/render.ts +59 -0
- package/exporter/types/sites.ts +1 -2
- package/exporter/utils/api.ts +55 -75
- package/exporter/utils/artifacts.ts +38 -0
- package/exporter/utils/brush.ts +34 -0
- package/exporter/utils/cache.ts +37 -62
- package/exporter/utils/check-environment-health.ts +80 -0
- package/exporter/utils/core-utils.ts +133 -272
- package/exporter/utils/domains.ts +10 -7
- package/exporter/{errors/index.ts → utils/errors.ts} +10 -9
- package/exporter/utils/folders.ts +163 -98
- package/exporter/utils/images.ts +1 -6
- package/exporter/utils/instance.ts +9 -13
- package/exporter/utils/loggin.ts +44 -91
- package/exporter/utils/npm-deps/find-up-simple.ts +100 -0
- package/exporter/utils/npm-deps/pkg-dir.ts +17 -0
- package/exporter/utils/npm-deps/xml-parser.ts +57 -0
- package/exporter/utils/pages.ts +23 -88
- package/exporter/utils/render.ts +180 -48
- package/exporter/utils/sitemaps.ts +129 -0
- package/exporter/utils/sites.ts +19 -197
- package/exporter/utils/store.ts +87 -180
- package/gatsby-browser.tsx +41 -58
- package/gatsby-config.ts +10 -17
- package/gatsby-node.ts +17 -78
- package/gatsby-ssr.tsx +2 -1
- package/package.json +35 -86
- package/plugins/gatsby-plugin-svgr-loader/gatsby-node.js +55 -0
- package/plugins/gatsby-plugin-svgr-loader/package.json +8 -0
- package/react/DynamicScript/index.tsx +33 -0
- package/{exporter/react → react}/Favicon/index.tsx +1 -7
- package/{exporter/react → react}/GriddoIntegrations/index.tsx +16 -22
- package/{exporter/react → react}/GriddoIntegrations/utils.ts +21 -9
- package/{build/react/index.d.ts → react/index.tsx} +1 -0
- package/src/components/Head.tsx +13 -46
- package/src/components/template.tsx +8 -30
- package/src/gatsby-node-utils.ts +73 -2
- package/src/html.tsx +2 -11
- package/src/types.ts +5 -5
- package/tsconfig.commands.json +36 -0
- package/tsconfig.exporter.json +19 -0
- package/tsconfig.json +5 -3
- package/build/adapters/gatsby/index.d.ts +0 -4
- package/build/adapters/gatsby/utils.d.ts +0 -22
- package/build/artifacts/index.d.ts +0 -6
- package/build/commands/end-render.d.ts +0 -2
- package/build/commands/move-assets.d.ts +0 -1
- package/build/commands/prepare-domains-render.d.ts +0 -1
- package/build/commands/reset-render.d.ts +0 -2
- package/build/commands/start-render.d.ts +0 -2
- package/build/commands/upload-search-content.d.ts +0 -2
- package/build/constants/endpoints.d.ts +0 -19
- package/build/constants/envs.d.ts +0 -37
- package/build/constants/index.d.ts +0 -57
- package/build/end-render.js +0 -74
- package/build/end-render.js.map +0 -7
- package/build/errors/errors-data.d.ts +0 -22
- package/build/errors/index.d.ts +0 -15
- package/build/index.d.ts +0 -29
- package/build/index.js +0 -73
- package/build/index.js.map +0 -7
- package/build/prepare-domains-render.js +0 -73
- package/build/prepare-domains-render.js.map +0 -7
- package/build/react/Favicon/index.d.ts +0 -5
- package/build/react/Favicon/utils.d.ts +0 -9
- package/build/react/GriddoIntegrations/index.d.ts +0 -20
- package/build/react/GriddoIntegrations/utils.d.ts +0 -26
- package/build/react/index.js +0 -3
- package/build/registers/api.d.ts +0 -9
- package/build/registers/gatsby.d.ts +0 -9
- package/build/registers/index.d.ts +0 -3
- package/build/reset-render.js +0 -74
- package/build/reset-render.js.map +0 -7
- package/build/services/auth.d.ts +0 -10
- package/build/services/domains.d.ts +0 -6
- package/build/services/navigation.d.ts +0 -50
- package/build/services/reference-fields.d.ts +0 -20
- package/build/services/register.d.ts +0 -36
- package/build/services/robots.d.ts +0 -19
- package/build/services/settings.d.ts +0 -4
- package/build/services/sites.d.ts +0 -29
- package/build/services/store.d.ts +0 -6
- package/build/start-render.js +0 -100
- package/build/start-render.js.map +0 -7
- package/build/types/api.d.ts +0 -142
- package/build/types/global.d.ts +0 -84
- package/build/types/navigation.d.ts +0 -28
- package/build/types/pages.d.ts +0 -144
- package/build/types/sites.d.ts +0 -57
- package/build/types/templates.d.ts +0 -8
- package/build/upload-search-content.js +0 -74
- package/build/upload-search-content.js.map +0 -7
- package/build/utils/alerts.d.ts +0 -3
- package/build/utils/api.d.ts +0 -23
- package/build/utils/cache.d.ts +0 -35
- package/build/utils/core-utils.d.ts +0 -107
- package/build/utils/create-build-data.d.ts +0 -8
- package/build/utils/domains.d.ts +0 -13
- package/build/utils/folders.d.ts +0 -53
- package/build/utils/health-checks.d.ts +0 -7
- package/build/utils/images.d.ts +0 -16
- package/build/utils/instance.d.ts +0 -21
- package/build/utils/loggin.d.ts +0 -51
- package/build/utils/pages.d.ts +0 -34
- package/build/utils/render.d.ts +0 -13
- package/build/utils/searches.d.ts +0 -15
- package/build/utils/sites.d.ts +0 -31
- package/build/utils/store.d.ts +0 -81
- package/cx.config.d.ts +0 -5
- package/cx.config.js +0 -36
- package/exporter/adapters/gatsby/utils.ts +0 -161
- package/exporter/artifacts/README.md +0 -34
- package/exporter/artifacts/index.ts +0 -33
- package/exporter/commands/move-assets.ts +0 -11
- package/exporter/constants/index.ts +0 -129
- package/exporter/index.ts +0 -82
- package/exporter/react/index.tsx +0 -11
- package/exporter/registers/api.ts +0 -14
- package/exporter/registers/gatsby.ts +0 -14
- package/exporter/registers/index.ts +0 -4
- package/exporter/services/domains.ts +0 -16
- package/exporter/services/register.ts +0 -113
- package/exporter/services/settings.ts +0 -17
- package/exporter/utils/alerts.ts +0 -29
- package/exporter/utils/create-build-data.ts +0 -17
- package/exporter/utils/health-checks.ts +0 -64
- package/exporter/utils/searches.ts +0 -156
- package/src/README.md +0 -7
- package/start-render.js +0 -7
- /package/{exporter/react → react}/Favicon/utils.ts +0 -0
package/exporter/utils/loggin.ts
CHANGED
|
@@ -1,52 +1,39 @@
|
|
|
1
1
|
import type { Site } from "../types/sites";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import fsp from "node:fs/promises";
|
|
4
|
+
import path from "node:path";
|
|
4
5
|
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
6
|
+
import { GRIDDO_BUILD_LOGS, GRIDDO_VERBOSE_LOGS } from "../constants/envs";
|
|
7
|
+
import { readDB } from "../services/db";
|
|
8
|
+
import { brush } from "./brush";
|
|
7
9
|
|
|
8
10
|
/**
|
|
9
11
|
* Custom basic logging function controlled by a environment variable.
|
|
10
|
-
*
|
|
11
12
|
* @param str The string to be logged.
|
|
12
13
|
*/
|
|
13
14
|
function verboseLog(str: string) {
|
|
14
|
-
if (
|
|
15
|
-
console.log(
|
|
16
|
-
kleur.yellow("verbose"),
|
|
17
|
-
kleur.dim(str.replace(/(\s)\s+/g, "$1").trim()),
|
|
18
|
-
);
|
|
15
|
+
if (GRIDDO_VERBOSE_LOGS) {
|
|
16
|
+
console.log(brush.yellow("verbose"), brush.dim(str.replace(/(\s)\s+/g, "$1").trim()));
|
|
19
17
|
}
|
|
20
18
|
}
|
|
21
19
|
|
|
22
20
|
/**
|
|
23
21
|
* Custom log inside a line-box.
|
|
24
|
-
*
|
|
25
22
|
* @param stringValue The string to be logged.
|
|
26
23
|
* @param paddingInline The number of white spaces inside the box at left and right.
|
|
27
24
|
* @param paddingBlock The number of white spaces inside the box at top and bottom.
|
|
28
25
|
*/
|
|
29
|
-
function boxLog(
|
|
30
|
-
stringValue: string,
|
|
31
|
-
title = "",
|
|
32
|
-
paddingInline = 1,
|
|
33
|
-
paddingBlock = 1,
|
|
34
|
-
) {
|
|
26
|
+
function boxLog(stringValue: string, title = "", paddingInline = 1, paddingBlock = 1) {
|
|
35
27
|
const lines = stringValue
|
|
36
28
|
.split("\n") // lines
|
|
37
29
|
.map((line) => line.trim()); // remove extra spaces
|
|
38
30
|
const windowTitle = title ? ` ${title} ` : "";
|
|
39
31
|
const windowTitleLength = title ? windowTitle.length : 0;
|
|
40
|
-
const longerContent =
|
|
41
|
-
Math.max(...lines.map((l) => l.length)) + paddingInline * 2;
|
|
32
|
+
const longerContent = Math.max(...lines.map((l) => l.length)) + paddingInline * 2;
|
|
42
33
|
const longerLine = Math.max(longerContent, windowTitleLength);
|
|
43
|
-
const paddingBlockString = `│${" ".repeat(longerLine)}│\n`.repeat(
|
|
44
|
-
paddingBlock,
|
|
45
|
-
);
|
|
34
|
+
const paddingBlockString = `│${" ".repeat(longerLine)}│\n`.repeat(paddingBlock);
|
|
46
35
|
const minWidth = longerLine;
|
|
47
|
-
const borderTop = `╭${windowTitle}${"─".repeat(
|
|
48
|
-
minWidth - windowTitleLength,
|
|
49
|
-
)}╮\n`;
|
|
36
|
+
const borderTop = `╭${windowTitle}${"─".repeat(minWidth - windowTitleLength)}╮\n`;
|
|
50
37
|
const borderBottom = `╰${"─".repeat(minWidth)}╯`;
|
|
51
38
|
const content = lines
|
|
52
39
|
.map((l) => {
|
|
@@ -55,9 +42,7 @@ function boxLog(
|
|
|
55
42
|
})
|
|
56
43
|
.join("");
|
|
57
44
|
|
|
58
|
-
console.log(
|
|
59
|
-
`${borderTop}${paddingBlockString}${content}${paddingBlockString}${borderBottom}`,
|
|
60
|
-
);
|
|
45
|
+
console.log(`${borderTop}${paddingBlockString}${content}${paddingBlockString}${borderBottom}`);
|
|
61
46
|
}
|
|
62
47
|
|
|
63
48
|
/**
|
|
@@ -67,7 +52,7 @@ function boxLog(
|
|
|
67
52
|
* @param str The string to be logged.
|
|
68
53
|
*/
|
|
69
54
|
function buildLog(str: string) {
|
|
70
|
-
if (
|
|
55
|
+
if (GRIDDO_BUILD_LOGS) {
|
|
71
56
|
console.log(str.replace(/(\s)\s+/g, "$1").trim());
|
|
72
57
|
}
|
|
73
58
|
}
|
|
@@ -77,7 +62,7 @@ function buildLog(str: string) {
|
|
|
77
62
|
* @param str The string to be logged.
|
|
78
63
|
*/
|
|
79
64
|
function infoLog(str: string) {
|
|
80
|
-
console.log(`${
|
|
65
|
+
console.log(`${brush.blue("info")} ${str}`);
|
|
81
66
|
}
|
|
82
67
|
|
|
83
68
|
/**
|
|
@@ -85,99 +70,67 @@ function infoLog(str: string) {
|
|
|
85
70
|
* @param str The string to be logged.
|
|
86
71
|
*/
|
|
87
72
|
function successLog(str: string) {
|
|
88
|
-
console.log(`${
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* Internal log
|
|
93
|
-
* @param values The values to be logged.
|
|
94
|
-
*/
|
|
95
|
-
function debugLog(...values: Array<unknown>) {
|
|
96
|
-
if (!envs.GRIDDO_DEBUG_LOGS) {
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
console.log(...values);
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* Return a scale size colors with a number and a measure string (KB by default).
|
|
104
|
-
*
|
|
105
|
-
* @param size The page size in KB.
|
|
106
|
-
* @param measure The measure string to be added in the log.
|
|
107
|
-
*/
|
|
108
|
-
function pageSizeLog(size: number, measure = "KB") {
|
|
109
|
-
const sizeScale = {
|
|
110
|
-
low: 50,
|
|
111
|
-
mid: 80,
|
|
112
|
-
large: 130,
|
|
113
|
-
extraLarge: 210,
|
|
114
|
-
};
|
|
115
|
-
|
|
116
|
-
// Ternary pawa!
|
|
117
|
-
const color =
|
|
118
|
-
size > sizeScale.large
|
|
119
|
-
? "red"
|
|
120
|
-
: size > sizeScale.mid
|
|
121
|
-
? "magenta"
|
|
122
|
-
: size > sizeScale.low
|
|
123
|
-
? "blue"
|
|
124
|
-
: "green";
|
|
125
|
-
|
|
126
|
-
return kleur[color](kleur.bold(`${size}${measure}`));
|
|
73
|
+
console.log(`${brush.green("success")} ${str}`);
|
|
127
74
|
}
|
|
128
75
|
|
|
129
76
|
/**
|
|
130
77
|
* Console log the Griddo exporter version.
|
|
131
78
|
*/
|
|
132
|
-
function showExporterVersion() {
|
|
79
|
+
async function showExporterVersion() {
|
|
133
80
|
console.clear();
|
|
134
|
-
const
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
.black()
|
|
139
|
-
.bold(" Griddo Exporter " + griddoVersion + " ")}\n`;
|
|
81
|
+
const { version } = JSON.parse(
|
|
82
|
+
await fsp.readFile(path.resolve(__dirname, "../..", "package.json"), "utf-8"),
|
|
83
|
+
) as { version: string };
|
|
84
|
+
const logo = `\n${brush.yellow(`Griddo Exporter ${version}`)}\n`;
|
|
140
85
|
|
|
141
86
|
console.log(logo);
|
|
142
87
|
}
|
|
143
88
|
|
|
144
89
|
function listSitesLog(title: string, sites: Array<Site>) {
|
|
145
90
|
const maxline = Math.max(
|
|
146
|
-
...sites.map(
|
|
147
|
-
(s) =>
|
|
148
|
-
s.name.length + (s.shouldBeUpdated ? 1 : 0) + s.id.toString().length,
|
|
149
|
-
),
|
|
91
|
+
...sites.map((s) => s.name.length + (s.shouldBeUpdated ? 1 : 0) + s.id.toString().length),
|
|
150
92
|
);
|
|
151
93
|
|
|
152
94
|
const sitesStr = sites.map((s) => {
|
|
153
95
|
const shouldBeUpdated = s.shouldBeUpdated ? "*" : "";
|
|
154
|
-
const lineLen =
|
|
155
|
-
s.name.length + shouldBeUpdated.length + s.id.toString().length;
|
|
96
|
+
const lineLen = s.name.length + shouldBeUpdated.length + s.id.toString().length;
|
|
156
97
|
const padding = " ".repeat(maxline - lineLen);
|
|
157
|
-
return `${
|
|
98
|
+
return `${brush.bold(s.name)} ${brush.dim(`(${s.id})`)} ${shouldBeUpdated} ${padding}${brush.dim("-")} ${brush.dim(s.slug)}`;
|
|
158
99
|
});
|
|
159
100
|
|
|
160
|
-
const sitesOutput =
|
|
161
|
-
sitesStr.length > 0
|
|
162
|
-
? "\n\n" + sitesStr.join("\n")
|
|
163
|
-
: kleur.dim("--none--\n");
|
|
101
|
+
const sitesOutput = sitesStr.length > 0 ? `\n\n${sitesStr.join("\n")}` : brush.dim("--none--\n");
|
|
164
102
|
|
|
165
103
|
console.log(`
|
|
166
104
|
${title} ${sitesOutput}`);
|
|
167
105
|
}
|
|
168
106
|
|
|
169
|
-
function
|
|
170
|
-
|
|
107
|
+
async function appendLogToFile(lineContent: string) {
|
|
108
|
+
if (!GRIDDO_BUILD_LOGS) {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
const data = await readDB();
|
|
113
|
+
|
|
114
|
+
const logFilePath = path.join(data.paths.root, `render-detail-log.txt`);
|
|
115
|
+
|
|
116
|
+
try {
|
|
117
|
+
await fsp.appendFile(logFilePath, `${lineContent.toString()}\n`);
|
|
118
|
+
} catch (error) {
|
|
119
|
+
if (error instanceof Error) {
|
|
120
|
+
console.error("Error", error.message);
|
|
121
|
+
} else {
|
|
122
|
+
console.error(error);
|
|
123
|
+
}
|
|
124
|
+
throw error;
|
|
125
|
+
}
|
|
171
126
|
}
|
|
172
127
|
|
|
173
128
|
export {
|
|
129
|
+
appendLogToFile,
|
|
174
130
|
boxLog,
|
|
175
131
|
buildLog,
|
|
176
|
-
debugLog,
|
|
177
|
-
errorLabelLog,
|
|
178
132
|
infoLog,
|
|
179
133
|
listSitesLog,
|
|
180
|
-
pageSizeLog,
|
|
181
134
|
showExporterVersion,
|
|
182
135
|
successLog,
|
|
183
136
|
verboseLog,
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import fsPromises from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import process from "node:process";
|
|
5
|
+
import { fileURLToPath } from "node:url";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Opciones para controlar el comportamiento de la búsqueda.
|
|
9
|
+
*/
|
|
10
|
+
export type Options = {
|
|
11
|
+
/**
|
|
12
|
+
El directorio desde donde empezar a buscar.
|
|
13
|
+
@default process.cwd()
|
|
14
|
+
*/
|
|
15
|
+
readonly cwd?: URL | string;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
El tipo de ruta a buscar.
|
|
19
|
+
@default 'file'
|
|
20
|
+
*/
|
|
21
|
+
readonly type?: "file" | "directory";
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
Un directorio en el que la búsqueda se detiene si no se encuentran coincidencias.
|
|
25
|
+
@default El directorio raíz del sistema
|
|
26
|
+
*/
|
|
27
|
+
readonly stopAt?: URL | string;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
// Función auxiliar para convertir una URL en una ruta de archivo de tipo string.
|
|
31
|
+
const toPath = (urlOrPath: URL | string | undefined): string | undefined =>
|
|
32
|
+
urlOrPath instanceof URL ? fileURLToPath(urlOrPath) : urlOrPath;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Encuentra un archivo o directorio de forma asíncrona subiendo por los directorios padre.
|
|
36
|
+
* @param name - El nombre del archivo o directorio a buscar.
|
|
37
|
+
* @param options - Opciones de búsqueda.
|
|
38
|
+
* @returns La ruta encontrada o `undefined` si no se pudo encontrar.
|
|
39
|
+
*/
|
|
40
|
+
export async function findUp(name: string, options: Options = {}): Promise<string | undefined> {
|
|
41
|
+
const { cwd = process.cwd(), type = "file", stopAt: stopAtOption } = options;
|
|
42
|
+
|
|
43
|
+
let directory = path.resolve(toPath(cwd) ?? "");
|
|
44
|
+
const { root } = path.parse(directory);
|
|
45
|
+
const stopAt = stopAtOption ? path.resolve(directory, toPath(stopAtOption)!) : root;
|
|
46
|
+
const isAbsoluteName = path.isAbsolute(name);
|
|
47
|
+
|
|
48
|
+
while (true) {
|
|
49
|
+
const filePath = isAbsoluteName ? name : path.join(directory, name);
|
|
50
|
+
try {
|
|
51
|
+
// eslint-disable-next-line no-await-in-loop
|
|
52
|
+
const stats = await fsPromises.stat(filePath);
|
|
53
|
+
if ((type === "file" && stats.isFile()) || (type === "directory" && stats.isDirectory())) {
|
|
54
|
+
return filePath;
|
|
55
|
+
}
|
|
56
|
+
} catch {
|
|
57
|
+
// Ignora errores (ej. el archivo no existe) y continúa la búsqueda.
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (directory === stopAt || directory === root) {
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
directory = path.dirname(directory);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Encuentra un archivo o directorio de forma síncrona subiendo por los directorios padre.
|
|
70
|
+
* @param name - El nombre del archivo o directorio a buscar.
|
|
71
|
+
* @param options - Opciones de búsqueda.
|
|
72
|
+
* @returns La ruta encontrada o `undefined` si no se pudo encontrar.
|
|
73
|
+
*/
|
|
74
|
+
export function findUpSync(name: string, options: Options = {}): string | undefined {
|
|
75
|
+
const { cwd = process.cwd(), type = "file", stopAt: stopAtOption } = options;
|
|
76
|
+
|
|
77
|
+
let directory = path.resolve(toPath(cwd) ?? "");
|
|
78
|
+
const { root } = path.parse(directory);
|
|
79
|
+
const stopAt = stopAtOption ? path.resolve(directory, toPath(stopAtOption)!) : root;
|
|
80
|
+
const isAbsoluteName = path.isAbsolute(name);
|
|
81
|
+
|
|
82
|
+
while (true) {
|
|
83
|
+
const filePath = isAbsoluteName ? name : path.join(directory, name);
|
|
84
|
+
try {
|
|
85
|
+
const stats = fs.statSync(filePath, { throwIfNoEntry: false });
|
|
86
|
+
if ((type === "file" && stats?.isFile()) || (type === "directory" && stats?.isDirectory())) {
|
|
87
|
+
return filePath;
|
|
88
|
+
}
|
|
89
|
+
} catch {
|
|
90
|
+
// En teoría, statSync con `throwIfNoEntry: false` no debería lanzar un error,
|
|
91
|
+
// pero se mantiene por seguridad.
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
if (directory === stopAt || directory === root) {
|
|
95
|
+
break;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
directory = path.dirname(directory);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
|
|
3
|
+
import { findUp, findUpSync } from "./find-up-simple";
|
|
4
|
+
|
|
5
|
+
async function pkgDir(options?: { readonly cwd?: string }) {
|
|
6
|
+
const { cwd } = options || {};
|
|
7
|
+
const filePath = await findUp("package.json", { cwd });
|
|
8
|
+
return filePath && path.dirname(filePath);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
function pkgDirSync(options?: { readonly cwd?: string }) {
|
|
12
|
+
const { cwd } = options || {};
|
|
13
|
+
const filePath = findUpSync("package.json", { cwd });
|
|
14
|
+
return filePath && path.dirname(filePath);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export { pkgDir, pkgDirSync };
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { SitemapItem } from "../../types/api";
|
|
2
|
+
|
|
3
|
+
function escapeXml(unsafe: string) {
|
|
4
|
+
return unsafe.replace(/[<>&'"”]/g, (c) => {
|
|
5
|
+
switch (c) {
|
|
6
|
+
case "<":
|
|
7
|
+
return "<";
|
|
8
|
+
case ">":
|
|
9
|
+
return ">";
|
|
10
|
+
case "&":
|
|
11
|
+
return "&";
|
|
12
|
+
case "'":
|
|
13
|
+
return "'";
|
|
14
|
+
case '"':
|
|
15
|
+
return """;
|
|
16
|
+
case "”":
|
|
17
|
+
return """;
|
|
18
|
+
default:
|
|
19
|
+
return c;
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function generateUrlsetXml(pages: Array<SitemapItem>) {
|
|
25
|
+
const urls = pages
|
|
26
|
+
.map(
|
|
27
|
+
(page) =>
|
|
28
|
+
` <url>
|
|
29
|
+
<loc>${escapeXml(page.loc)}</loc>
|
|
30
|
+
<lastmod>${page.lastmod}</lastmod>
|
|
31
|
+
<priority>${page.priority}</priority>
|
|
32
|
+
</url>`,
|
|
33
|
+
)
|
|
34
|
+
.join("\n");
|
|
35
|
+
|
|
36
|
+
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
37
|
+
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
|
|
38
|
+
${urls}
|
|
39
|
+
</urlset>`;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function generateSitemapIndexXml(sitemaps: Array<string>) {
|
|
43
|
+
const sitemapEntries = sitemaps
|
|
44
|
+
.map(
|
|
45
|
+
(loc) => ` <sitemap>
|
|
46
|
+
<loc>${escapeXml(loc)}</loc>
|
|
47
|
+
</sitemap>`,
|
|
48
|
+
)
|
|
49
|
+
.join("\n");
|
|
50
|
+
|
|
51
|
+
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
52
|
+
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
|
53
|
+
${sitemapEntries}
|
|
54
|
+
</sitemapindex>`;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export { generateSitemapIndexXml, generateUrlsetXml };
|
package/exporter/utils/pages.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Core, Fields } from "@griddo/core";
|
|
1
2
|
import type {
|
|
2
3
|
APIPageObject,
|
|
3
4
|
GriddoListPage,
|
|
@@ -9,14 +10,9 @@ import type {
|
|
|
9
10
|
PageAdditionalInfo,
|
|
10
11
|
} from "../types/pages";
|
|
11
12
|
import type { TemplateWithReferenceField } from "../types/templates";
|
|
12
|
-
import type { Core, Fields } from "@griddo/core";
|
|
13
|
-
|
|
14
|
-
import dotenv from "dotenv";
|
|
15
13
|
|
|
16
14
|
import { formatImage } from "./images";
|
|
17
15
|
|
|
18
|
-
dotenv.config();
|
|
19
|
-
|
|
20
16
|
// Consts
|
|
21
17
|
const DEFAULT_ITEMS_PER_PAGE_FOR_LIST_TEMPLATES = 25;
|
|
22
18
|
|
|
@@ -31,10 +27,7 @@ function getOpenGraph({
|
|
|
31
27
|
socialTitle,
|
|
32
28
|
socialDescription,
|
|
33
29
|
socialImage,
|
|
34
|
-
}: Pick<
|
|
35
|
-
Core.Page,
|
|
36
|
-
"socialTitle" | "socialDescription" | "socialImage"
|
|
37
|
-
>): Core.Page["openGraph"] {
|
|
30
|
+
}: Pick<Core.Page, "socialTitle" | "socialDescription" | "socialImage">): Core.Page["openGraph"] {
|
|
38
31
|
return {
|
|
39
32
|
type: "website",
|
|
40
33
|
title: socialTitle,
|
|
@@ -49,9 +42,7 @@ function getOpenGraph({
|
|
|
49
42
|
*
|
|
50
43
|
* @param params A Page object
|
|
51
44
|
*/
|
|
52
|
-
function getPageMetadata(
|
|
53
|
-
params: Core.Page,
|
|
54
|
-
): GriddoPageObject["context"]["pageMetadata"] {
|
|
45
|
+
function getPageMetadata(params: Core.Page): GriddoPageObject["context"]["pageMetadata"] {
|
|
55
46
|
const {
|
|
56
47
|
title,
|
|
57
48
|
metaTitle,
|
|
@@ -87,9 +78,7 @@ function getPageMetadata(
|
|
|
87
78
|
index: isIndexed ? "index" : "noindex",
|
|
88
79
|
follow: follow ? "follow" : "nofollow",
|
|
89
80
|
translate: metasAdvancedList.includes("notranslate") ? "notranslate" : "",
|
|
90
|
-
metasAdvanced: metasAdvancedList
|
|
91
|
-
.filter((item) => item !== "notranslate")
|
|
92
|
-
.join(),
|
|
81
|
+
metasAdvanced: metasAdvancedList.filter((item) => item !== "notranslate").join(),
|
|
93
82
|
pageLanguages,
|
|
94
83
|
metaKeywords: metaKeywords
|
|
95
84
|
?.filter(Boolean)
|
|
@@ -133,8 +122,9 @@ async function createGriddoPageObject(
|
|
|
133
122
|
siteSlug,
|
|
134
123
|
socials,
|
|
135
124
|
theme,
|
|
136
|
-
navigations
|
|
125
|
+
navigations,
|
|
137
126
|
} = additionalInfo;
|
|
127
|
+
const { header, footer } = navigations;
|
|
138
128
|
|
|
139
129
|
// Update page object
|
|
140
130
|
page.breadcrumb = breadcrumb;
|
|
@@ -207,10 +197,7 @@ async function createGriddoPageObject(
|
|
|
207
197
|
* @param page A Griddo single page object.
|
|
208
198
|
* @param additionalInfo Additional page info.
|
|
209
199
|
*/
|
|
210
|
-
async function createGriddoSinglePage(
|
|
211
|
-
page: GriddoSinglePage,
|
|
212
|
-
additionalInfo: PageAdditionalInfo,
|
|
213
|
-
) {
|
|
200
|
+
async function createGriddoSinglePage(page: GriddoSinglePage, additionalInfo: PageAdditionalInfo) {
|
|
214
201
|
return createGriddoPageObject(page, additionalInfo);
|
|
215
202
|
}
|
|
216
203
|
|
|
@@ -218,14 +205,7 @@ async function createGriddoSinglePage(
|
|
|
218
205
|
* Create multiples pages from one page as list paginated pages
|
|
219
206
|
*/
|
|
220
207
|
async function createGriddoListPages(
|
|
221
|
-
{
|
|
222
|
-
page,
|
|
223
|
-
pages,
|
|
224
|
-
isRoot = false,
|
|
225
|
-
defaultLang,
|
|
226
|
-
template,
|
|
227
|
-
totalQueriedItems,
|
|
228
|
-
}: GriddoListPage,
|
|
208
|
+
{ page, pages, isRoot = false, defaultLang, template, totalQueriedItems }: GriddoListPage,
|
|
229
209
|
additionalInfo: PageAdditionalInfo,
|
|
230
210
|
) {
|
|
231
211
|
const allPages = pages.map(async (dataInPage, idx) => {
|
|
@@ -233,19 +213,8 @@ async function createGriddoListPages(
|
|
|
233
213
|
const pageNumber = idx + 1;
|
|
234
214
|
const { domainUrl, compose } = page.fullPath;
|
|
235
215
|
|
|
236
|
-
// Crea un id como número negativo y añadiendo un sufijo para los
|
|
237
|
-
// listados estáticos. Esto es así para marcarlas y posteriormente
|
|
238
|
-
// borrarlas siempre en cada nuevo render desde el Adapter.
|
|
239
|
-
//
|
|
240
|
-
// id de página con mode:"list": 1546
|
|
241
|
-
// ids de las "sub-páginas": -15460, -15461, -1546n, (-)id(idx)
|
|
242
|
-
//
|
|
243
|
-
// @todo eliminar el concepto multipage de CX, debería ser algo core de
|
|
244
|
-
// Griddo itself: API/AX, que fuesen páginas con sus ids, etc..
|
|
245
|
-
|
|
246
216
|
const paginatedPage = {
|
|
247
217
|
...page,
|
|
248
|
-
id: Number.parseInt(`-${page.id}${idx}`),
|
|
249
218
|
fullPath: {
|
|
250
219
|
...page.fullPath,
|
|
251
220
|
// Add a page number (tailPageNumber) from page 2 onwards
|
|
@@ -287,16 +256,11 @@ async function createGriddoListPages(
|
|
|
287
256
|
* @param page A Griddo Multipage object.
|
|
288
257
|
* @param additionalInfo Additional page info.
|
|
289
258
|
*/
|
|
290
|
-
function createGriddoMultiPages(
|
|
291
|
-
page: GriddoMultiPage,
|
|
292
|
-
additionalInfo: PageAdditionalInfo,
|
|
293
|
-
) {
|
|
259
|
+
function createGriddoMultiPages(page: GriddoMultiPage, additionalInfo: PageAdditionalInfo) {
|
|
294
260
|
const { multiPageElements: multiPageElementsBulk, ...cleanPage } = page;
|
|
295
261
|
// TODO: Use structuredClone() when node 18 is available.
|
|
296
262
|
// WARN!! Se ha probado que parse(stringify()) está tan optimizado que puede ser más rápido que structuredClone...
|
|
297
|
-
const multiPageElements: MultiPageElements = JSON.parse(
|
|
298
|
-
JSON.stringify(multiPageElementsBulk),
|
|
299
|
-
);
|
|
263
|
+
const multiPageElements: MultiPageElements = JSON.parse(JSON.stringify(multiPageElementsBulk));
|
|
300
264
|
|
|
301
265
|
// Si no hay un elemento sin slug, como mínimo hay que dibujar una página
|
|
302
266
|
// principal para el conjunto de páginas.
|
|
@@ -305,7 +269,7 @@ function createGriddoMultiPages(
|
|
|
305
269
|
}
|
|
306
270
|
|
|
307
271
|
// Creates each page based on `multiPageElements` from the schema.
|
|
308
|
-
const allPages = multiPageElements.map(async (pageElement
|
|
272
|
+
const allPages = multiPageElements.map(async (pageElement) => {
|
|
309
273
|
// TODO: Use structuredClone() when node 18 is available.
|
|
310
274
|
// WARN!! Se ha probado que parse(stringify()) está tan optimizado que puede ser más rápido que structuredClone...
|
|
311
275
|
const paginatedPage: APIPageObject = JSON.parse(JSON.stringify(cleanPage));
|
|
@@ -323,9 +287,7 @@ function createGriddoMultiPages(
|
|
|
323
287
|
|
|
324
288
|
const cleanSectionSlug = sectionSlug?.replace(/\//g, "");
|
|
325
289
|
const isRootSlug = sectionSlug === "/";
|
|
326
|
-
const rightSectionSlug = isRootSlug
|
|
327
|
-
? cleanSectionSlug
|
|
328
|
-
: `${cleanSectionSlug}/`;
|
|
290
|
+
const rightSectionSlug = isRootSlug ? cleanSectionSlug : `${cleanSectionSlug}/`;
|
|
329
291
|
|
|
330
292
|
const slash = compose.endsWith("/") ? "" : "/";
|
|
331
293
|
const newCompose = `${compose}${slash}${rightSectionSlug}`;
|
|
@@ -338,24 +300,12 @@ function createGriddoMultiPages(
|
|
|
338
300
|
paginatedPage.metaDescription = metaDescription;
|
|
339
301
|
}
|
|
340
302
|
|
|
341
|
-
// Crea un id como número negativo y añadiendo un sufijo para las multipages.
|
|
342
|
-
// Esto es así para marcarlas y posteriormente borrarlas siempre en cada
|
|
343
|
-
// nuevo render desde el Adapter.
|
|
344
|
-
//
|
|
345
|
-
// id de página con hasMultipageTrue: 1546
|
|
346
|
-
// ids de las "sub-páginas": -15460, -15461, -1546n, (-)id(idx)
|
|
347
|
-
//
|
|
348
|
-
// @todo eliminar el concepto multipage de CX, debería ser algo core de
|
|
349
|
-
// Griddo itself: API/AX, que fuesen páginas con sus ids, etc..
|
|
350
|
-
paginatedPage.id = Number.parseInt(`-${paginatedPage.id}${idx}`);
|
|
351
|
-
|
|
352
303
|
paginatedPage.fullUrl = `${fullUrl}/${rightSectionSlug}`;
|
|
353
304
|
paginatedPage.fullPath.compose = newCompose;
|
|
354
305
|
paginatedPage.slug = newCompose;
|
|
355
306
|
paginatedPage.template.activeSectionSlug = sectionSlug;
|
|
356
307
|
paginatedPage.template.activeSectionBase = fullUrl;
|
|
357
|
-
paginatedPage.metaTitle =
|
|
358
|
-
metaTitle.trim() || title.trim() || paginatedPage.metaTitle;
|
|
308
|
+
paginatedPage.metaTitle = metaTitle.trim() || title.trim() || paginatedPage.metaTitle;
|
|
359
309
|
|
|
360
310
|
return createGriddoPageObject(paginatedPage, additionalInfo);
|
|
361
311
|
});
|
|
@@ -368,9 +318,7 @@ function createGriddoMultiPages(
|
|
|
368
318
|
*
|
|
369
319
|
* @param page The page to get the multipage parts.
|
|
370
320
|
*/
|
|
371
|
-
function getMultiPageElements(
|
|
372
|
-
page: TemplateWithReferenceField,
|
|
373
|
-
): Promise<MultiPageElements> | null {
|
|
321
|
+
function getMultiPageElements(page: TemplateWithReferenceField): Promise<MultiPageElements> | null {
|
|
374
322
|
const multiPageElements = new Promise((resolve) => {
|
|
375
323
|
// Recursive
|
|
376
324
|
const getMultiPageComponent = (
|
|
@@ -391,11 +339,10 @@ function getMultiPageElements(
|
|
|
391
339
|
hasGriddoMultiPage: boolean;
|
|
392
340
|
elements: Array<Record<string, unknown>>;
|
|
393
341
|
};
|
|
394
|
-
const isValidComponent =
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
).includes('"hasGriddoMultiPage":true');
|
|
342
|
+
const isValidComponent = currentComponent || typeof currentComponent === "object";
|
|
343
|
+
const hasGriddoMultiPageProp = JSON.stringify(currentComponent).includes(
|
|
344
|
+
'"hasGriddoMultiPage":true',
|
|
345
|
+
);
|
|
399
346
|
|
|
400
347
|
if (!isValidComponent) {
|
|
401
348
|
continue;
|
|
@@ -445,11 +392,7 @@ function getMultiPageElements(
|
|
|
445
392
|
* getPage(3, ["a", "b", "c", "d", "e", "f", "g", "h"], 2)
|
|
446
393
|
* // -> ["d", "e", "f"]
|
|
447
394
|
*/
|
|
448
|
-
function getPage(
|
|
449
|
-
itemsPerPage: number,
|
|
450
|
-
items: Array<Fields.QueriedDataItem>,
|
|
451
|
-
page: number,
|
|
452
|
-
) {
|
|
395
|
+
function getPage(itemsPerPage: number, items: Array<Fields.QueriedDataItem>, page: number) {
|
|
453
396
|
return items?.slice(itemsPerPage * (page - 1), itemsPerPage * page);
|
|
454
397
|
}
|
|
455
398
|
|
|
@@ -463,16 +406,11 @@ function getPage(
|
|
|
463
406
|
* getPageCluster(3, ["a", "b", "c", "d", "e", "f", "g", "h"])
|
|
464
407
|
* // -> [["a", "b", "c"], ["d", "e", "f"], ["g", "h"]]
|
|
465
408
|
*/
|
|
466
|
-
function getPageCluster(
|
|
467
|
-
itemsPerPage: number,
|
|
468
|
-
items: Array<Fields.QueriedDataItem>,
|
|
469
|
-
) {
|
|
409
|
+
function getPageCluster(itemsPerPage: number, items: Array<Fields.QueriedDataItem>) {
|
|
470
410
|
const totalPagesCount = Math.ceil(items.length / itemsPerPage) || 1;
|
|
471
411
|
const pageNumbers = Array.from({ length: totalPagesCount }, (_, i) => i + 1);
|
|
472
412
|
|
|
473
|
-
return pageNumbers?.map((pageNumber) =>
|
|
474
|
-
getPage(itemsPerPage, items, pageNumber),
|
|
475
|
-
);
|
|
413
|
+
return pageNumbers?.map((pageNumber) => getPage(itemsPerPage, items, pageNumber));
|
|
476
414
|
}
|
|
477
415
|
|
|
478
416
|
/**
|
|
@@ -482,8 +420,7 @@ function getPageCluster(
|
|
|
482
420
|
*/
|
|
483
421
|
function getPaginatedPages(listTemplate: TemplateWithReferenceField) {
|
|
484
422
|
const items = listTemplate.queriedItems || [];
|
|
485
|
-
const itemsPerPage =
|
|
486
|
-
listTemplate?.itemsPerPage || DEFAULT_ITEMS_PER_PAGE_FOR_LIST_TEMPLATES;
|
|
423
|
+
const itemsPerPage = listTemplate?.itemsPerPage || DEFAULT_ITEMS_PER_PAGE_FOR_LIST_TEMPLATES;
|
|
487
424
|
const pageClusters = getPageCluster(itemsPerPage, items);
|
|
488
425
|
|
|
489
426
|
return pageClusters;
|
|
@@ -524,9 +461,7 @@ function addPageNumberToUrl(
|
|
|
524
461
|
return removeDuplicateTrailing(`${url}${endingSlash}`);
|
|
525
462
|
}
|
|
526
463
|
|
|
527
|
-
return removeDuplicateTrailing(
|
|
528
|
-
`${url}${trailingSlash}${pageNumber}${endingSlash}`,
|
|
529
|
-
);
|
|
464
|
+
return removeDuplicateTrailing(`${url}${trailingSlash}${pageNumber}${endingSlash}`);
|
|
530
465
|
}
|
|
531
466
|
|
|
532
467
|
/**
|