@griddo/cx 11.9.9-rc.0 → 11.9.9-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 +240 -13
- 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 +1 -0
- package/build/commands/reset-render.d.ts +1 -0
- package/build/commands/start-render.d.ts +1 -0
- package/build/commands/upload-search-content.d.ts +1 -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/{shared/errors.d.ts → errors/errors-data.d.ts} +3 -5
- package/build/errors/index.d.ts +15 -0
- package/build/index.d.ts +29 -10
- package/build/index.js +73 -406
- 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/GriddoIntegrations/index.d.ts +4 -3
- package/build/react/GriddoIntegrations/utils.d.ts +6 -7
- package/build/react/index.d.ts +2 -3
- package/build/react/index.js +3 -1
- 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 +5 -2
- package/build/services/domains.d.ts +4 -3
- package/build/services/navigation.d.ts +16 -16
- package/build/services/reference-fields.d.ts +3 -3
- package/build/services/register.d.ts +36 -0
- package/build/services/robots.d.ts +19 -2
- package/build/services/settings.d.ts +4 -0
- package/build/services/sites.d.ts +5 -8
- package/build/services/store.d.ts +1 -10
- package/build/start-render.js +100 -0
- package/build/start-render.js.map +7 -0
- package/build/{shared/types → types}/api.d.ts +18 -18
- package/build/{shared/types → types}/global.d.ts +16 -15
- package/build/{shared/types → types}/navigation.d.ts +5 -5
- package/build/{shared/types → types}/pages.d.ts +9 -9
- package/build/{shared/types → types}/sites.d.ts +19 -18
- 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/{services → utils}/api.d.ts +1 -1
- 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/{core/check-env-health.d.ts → utils/health-checks.d.ts} +2 -4
- package/build/utils/loggin.d.ts +51 -0
- package/build/{services → utils}/pages.d.ts +3 -3
- 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 +162 -0
- 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 +24 -16
- package/exporter/commands/end-render.ts +86 -65
- package/exporter/commands/move-assets.ts +11 -0
- package/exporter/commands/prepare-domains-render.ts +35 -147
- package/exporter/commands/reset-render.ts +8 -13
- package/exporter/commands/start-render.ts +64 -26
- package/exporter/commands/upload-search-content.ts +26 -201
- package/exporter/{shared → constants}/endpoints.ts +11 -12
- package/exporter/constants/envs.ts +94 -0
- package/exporter/constants/index.ts +129 -0
- package/exporter/{shared/errors.ts → errors/errors-data.ts} +14 -24
- package/exporter/errors/index.ts +40 -0
- package/exporter/index.ts +56 -14
- package/exporter/react/{GriddoFavicon → Favicon}/index.tsx +9 -3
- package/exporter/react/GriddoIntegrations/index.tsx +23 -17
- package/exporter/react/GriddoIntegrations/utils.ts +12 -24
- package/exporter/react/index.tsx +9 -3
- 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 +10 -8
- package/exporter/services/domains.ts +8 -23
- package/exporter/services/navigation.ts +18 -12
- package/exporter/services/reference-fields.ts +32 -14
- package/exporter/services/register.ts +113 -0
- package/exporter/services/robots.ts +61 -33
- package/exporter/services/settings.ts +17 -0
- package/exporter/services/sites.ts +28 -40
- package/exporter/services/store.ts +321 -354
- package/exporter/{shared/types → types}/api.ts +41 -40
- package/exporter/{shared/types → types}/global.ts +21 -17
- package/exporter/{shared/types → types}/navigation.ts +3 -3
- package/exporter/{shared/types → types}/pages.ts +11 -10
- package/exporter/{shared/types → types}/sites.ts +19 -18
- package/exporter/utils/alerts.ts +29 -0
- package/exporter/utils/api.ts +243 -0
- package/exporter/utils/cache.ts +142 -0
- package/exporter/utils/core-utils.ts +458 -0
- package/exporter/utils/create-build-data.ts +17 -0
- package/exporter/utils/domains.ts +39 -0
- package/exporter/utils/folders.ts +320 -0
- package/exporter/utils/health-checks.ts +64 -0
- package/exporter/{core → utils}/images.ts +6 -1
- package/exporter/{core → utils}/instance.ts +13 -9
- package/exporter/utils/loggin.ts +184 -0
- package/exporter/{services → utils}/pages.ts +92 -27
- package/exporter/utils/render.ts +71 -0
- package/exporter/utils/searches.ts +156 -0
- package/exporter/utils/sites.ts +312 -0
- package/exporter/utils/store.ts +314 -0
- package/gatsby-browser.tsx +58 -41
- package/gatsby-config.ts +17 -10
- package/gatsby-node.ts +79 -20
- package/gatsby-ssr.tsx +1 -2
- package/package.json +80 -41
- package/src/README.md +7 -0
- package/src/components/Head.tsx +73 -28
- package/src/components/template.tsx +29 -6
- package/src/gatsby-node-utils.ts +2 -76
- package/src/html.tsx +11 -2
- package/src/types.ts +3 -3
- package/start-render.js +7 -0
- package/tsconfig.json +3 -5
- package/build/commands/end-render.js +0 -31
- package/build/commands/end-render.js.map +0 -7
- package/build/commands/prepare-assets-directory.js +0 -9
- package/build/commands/prepare-assets-directory.js.map +0 -7
- package/build/commands/prepare-domains-render.js +0 -38
- package/build/commands/prepare-domains-render.js.map +0 -7
- package/build/commands/reset-render.js +0 -31
- package/build/commands/reset-render.js.map +0 -7
- package/build/commands/single-domain-upload-search-content.d.ts +0 -1
- package/build/commands/start-render.js +0 -66
- package/build/commands/start-render.js.map +0 -7
- package/build/commands/upload-search-content.js +0 -31
- package/build/commands/upload-search-content.js.map +0 -7
- package/build/core/GriddoLog.d.ts +0 -16
- package/build/core/db-class.d.ts +0 -11
- package/build/core/db.d.ts +0 -4
- package/build/core/dist-rollback.d.ts +0 -11
- package/build/core/errors.d.ts +0 -26
- package/build/core/fs.d.ts +0 -69
- package/build/core/life-cycle.d.ts +0 -26
- package/build/core/logger.d.ts +0 -18
- package/build/core/objects.d.ts +0 -11
- package/build/core/print-logos.d.ts +0 -5
- package/build/react/DynamicScript/index.d.ts +0 -4
- package/build/react/GriddoFavicon/index.d.ts +0 -4
- package/build/react/GriddoOpenGraph/index.d.ts +0 -10
- package/build/services/manage-sites.d.ts +0 -22
- package/build/services/manage-store.d.ts +0 -32
- package/build/services/render-artifacts.d.ts +0 -6
- package/build/services/render.d.ts +0 -70
- package/build/services/sitemaps.d.ts +0 -5
- package/build/shared/context.d.ts +0 -36
- package/build/shared/envs.d.ts +0 -19
- package/build/shared/npm-modules/brush.d.ts +0 -18
- package/build/shared/npm-modules/find-up-simple.d.ts +0 -34
- package/build/shared/npm-modules/pkg-dir.d.ts +0 -7
- package/build/shared/npm-modules/xml-parser.d.ts +0 -4
- package/build/shared/types/render.d.ts +0 -54
- package/build/shared/types.d.ts +0 -15
- package/build/ssg-adapters/gatsby/actions/clean.d.ts +0 -3
- package/build/ssg-adapters/gatsby/actions/close.d.ts +0 -3
- package/build/ssg-adapters/gatsby/actions/data.d.ts +0 -2
- package/build/ssg-adapters/gatsby/actions/healthCheck.d.ts +0 -2
- package/build/ssg-adapters/gatsby/actions/init.d.ts +0 -2
- package/build/ssg-adapters/gatsby/actions/logs.d.ts +0 -3
- package/build/ssg-adapters/gatsby/actions/meta.d.ts +0 -2
- package/build/ssg-adapters/gatsby/actions/prepare.d.ts +0 -2
- package/build/ssg-adapters/gatsby/actions/relocation.d.ts +0 -2
- package/build/ssg-adapters/gatsby/actions/restore.d.ts +0 -3
- package/build/ssg-adapters/gatsby/actions/ssg.d.ts +0 -3
- package/build/ssg-adapters/gatsby/actions/sync.d.ts +0 -3
- package/build/ssg-adapters/gatsby/index.d.ts +0 -9
- package/build/ssg-adapters/gatsby/shared/artifacts.d.ts +0 -4
- package/build/ssg-adapters/gatsby/shared/diff-assets.d.ts +0 -15
- package/build/ssg-adapters/gatsby/shared/extract-assets.d.ts +0 -7
- package/build/ssg-adapters/gatsby/shared/gatsby-build.d.ts +0 -7
- package/build/ssg-adapters/gatsby/shared/render-rollback.d.ts +0 -18
- package/build/ssg-adapters/gatsby/shared/sync-render.d.ts +0 -26
- package/build/ssg-adapters/gatsby/shared/types.d.ts +0 -34
- package/cli.mjs +0 -231
- package/exporter/build-esbuild.noop +0 -42
- package/exporter/commands/README.md +0 -151
- package/exporter/commands/prepare-assets-directory.ts +0 -34
- package/exporter/commands/single-domain-upload-search-content.ts +0 -206
- package/exporter/core/GriddoLog.ts +0 -45
- package/exporter/core/check-env-health.ts +0 -204
- package/exporter/core/db-class.ts +0 -54
- package/exporter/core/db.ts +0 -33
- package/exporter/core/dist-rollback.ts +0 -49
- package/exporter/core/errors.ts +0 -92
- package/exporter/core/fs.ts +0 -385
- package/exporter/core/life-cycle.ts +0 -73
- package/exporter/core/logger.ts +0 -141
- package/exporter/core/objects.ts +0 -37
- package/exporter/core/print-logos.ts +0 -21
- package/exporter/react/DynamicScript/index.tsx +0 -33
- package/exporter/react/GriddoOpenGraph/index.tsx +0 -39
- package/exporter/services/api.ts +0 -306
- package/exporter/services/manage-sites.ts +0 -116
- package/exporter/services/manage-store.ts +0 -173
- package/exporter/services/render-artifacts.ts +0 -44
- package/exporter/services/render.ts +0 -229
- package/exporter/services/sitemaps.ts +0 -129
- package/exporter/shared/context.ts +0 -49
- package/exporter/shared/envs.ts +0 -62
- package/exporter/shared/npm-modules/README.md +0 -36
- package/exporter/shared/npm-modules/brush.ts +0 -34
- package/exporter/shared/npm-modules/find-up-simple.ts +0 -100
- package/exporter/shared/npm-modules/pkg-dir.ts +0 -17
- package/exporter/shared/npm-modules/xml-parser.ts +0 -57
- package/exporter/shared/types/render.ts +0 -63
- package/exporter/shared/types.ts +0 -15
- package/exporter/ssg-adapters/gatsby/actions/clean.ts +0 -26
- package/exporter/ssg-adapters/gatsby/actions/close.ts +0 -17
- package/exporter/ssg-adapters/gatsby/actions/data.ts +0 -22
- package/exporter/ssg-adapters/gatsby/actions/healthCheck.ts +0 -10
- package/exporter/ssg-adapters/gatsby/actions/init.ts +0 -12
- package/exporter/ssg-adapters/gatsby/actions/logs.ts +0 -10
- package/exporter/ssg-adapters/gatsby/actions/meta.ts +0 -13
- package/exporter/ssg-adapters/gatsby/actions/prepare.ts +0 -9
- package/exporter/ssg-adapters/gatsby/actions/relocation.ts +0 -15
- package/exporter/ssg-adapters/gatsby/actions/restore.ts +0 -21
- package/exporter/ssg-adapters/gatsby/actions/ssg.ts +0 -12
- package/exporter/ssg-adapters/gatsby/actions/sync.ts +0 -65
- package/exporter/ssg-adapters/gatsby/index.ts +0 -114
- package/exporter/ssg-adapters/gatsby/shared/artifacts.ts +0 -17
- package/exporter/ssg-adapters/gatsby/shared/diff-assets.ts +0 -128
- package/exporter/ssg-adapters/gatsby/shared/extract-assets.ts +0 -75
- package/exporter/ssg-adapters/gatsby/shared/gatsby-build.ts +0 -58
- package/exporter/ssg-adapters/gatsby/shared/render-rollback.ts +0 -33
- package/exporter/ssg-adapters/gatsby/shared/sync-render.ts +0 -298
- package/exporter/ssg-adapters/gatsby/shared/types.ts +0 -35
- package/plugins/gatsby-plugin-svgr-loader/gatsby-node.js +0 -55
- package/plugins/gatsby-plugin-svgr-loader/package.json +0 -8
- package/tsconfig.commands.json +0 -36
- package/tsconfig.exporter.json +0 -21
- /package/build/commands/{prepare-assets-directory.d.ts → move-assets.d.ts} +0 -0
- /package/build/{shared → constants}/endpoints.d.ts +0 -0
- /package/build/react/{GriddoFavicon → Favicon}/utils.d.ts +0 -0
- /package/build/{shared/types → types}/templates.d.ts +0 -0
- /package/build/{core → utils}/images.d.ts +0 -0
- /package/build/{core → utils}/instance.d.ts +0 -0
- /package/exporter/react/{GriddoFavicon → Favicon}/utils.ts +0 -0
- /package/exporter/{shared/types → types}/templates.ts +0 -0
package/exporter/core/fs.ts
DELETED
|
@@ -1,385 +0,0 @@
|
|
|
1
|
-
import type { MakeDirectoryOptions } from "node:fs";
|
|
2
|
-
|
|
3
|
-
import fsp from "node:fs/promises";
|
|
4
|
-
import path from "node:path";
|
|
5
|
-
|
|
6
|
-
import { ArtifactError } from "../shared/errors";
|
|
7
|
-
import { throwError } from "./errors";
|
|
8
|
-
import { GriddoLog } from "./GriddoLog";
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Remove an empty directory from the basePath recursively.
|
|
12
|
-
* If the directory has only .xml files it will handle as empty too (empty site)
|
|
13
|
-
*
|
|
14
|
-
* @param baseDir - The base directory.
|
|
15
|
-
*/
|
|
16
|
-
async function deleteDisposableSiteDirs(baseDir: string) {
|
|
17
|
-
if (!(await pathExists(baseDir))) {
|
|
18
|
-
return;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
const sitesDirs = (await fsp.readdir(baseDir, { withFileTypes: true })).filter((file) =>
|
|
22
|
-
file.isDirectory(),
|
|
23
|
-
);
|
|
24
|
-
|
|
25
|
-
for (const siteDir of sitesDirs) {
|
|
26
|
-
const sitePath = path.join(baseDir, siteDir.name);
|
|
27
|
-
if (await siteIsEmpty(sitePath)) {
|
|
28
|
-
await fsp.rm(sitePath, { recursive: true });
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Creates multiple artifact directories.
|
|
35
|
-
*
|
|
36
|
-
* @param dirs - An array of directory paths.
|
|
37
|
-
* @param options - Same option as `fs.mkdirSync()`
|
|
38
|
-
*/
|
|
39
|
-
async function mkDirs(dirs: string[], options?: MakeDirectoryOptions) {
|
|
40
|
-
for (const dir of dirs) {
|
|
41
|
-
try {
|
|
42
|
-
if (!(await pathExists(dir))) {
|
|
43
|
-
await fsp.mkdir(dir, { recursive: true, ...options });
|
|
44
|
-
GriddoLog.verbose(`create directory: ${dir}`);
|
|
45
|
-
}
|
|
46
|
-
} catch (error) {
|
|
47
|
-
throwError(ArtifactError, error);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
async function renamePath(src: string, dst: string) {
|
|
53
|
-
try {
|
|
54
|
-
if (await pathExists(src)) {
|
|
55
|
-
await fsp.rename(src, dst);
|
|
56
|
-
GriddoLog.verbose(`rename ${src} to ${dst}`);
|
|
57
|
-
}
|
|
58
|
-
} catch (error) {
|
|
59
|
-
throwError(ArtifactError, error);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* Copy multiple directories with backup option.
|
|
65
|
-
*
|
|
66
|
-
* @param src - Source directory.
|
|
67
|
-
* @param dst - Destination directory.
|
|
68
|
-
* @param dirs - Directories to copy.
|
|
69
|
-
* @param options.withBackup - Create a previous backup before copy.
|
|
70
|
-
*/
|
|
71
|
-
async function cpDirs(
|
|
72
|
-
src: string,
|
|
73
|
-
dst: string,
|
|
74
|
-
dirs: string[],
|
|
75
|
-
options = {
|
|
76
|
-
withBackup: false,
|
|
77
|
-
},
|
|
78
|
-
) {
|
|
79
|
-
const { withBackup } = options;
|
|
80
|
-
for (const dir of dirs) {
|
|
81
|
-
const srcCompose = path.join(src, dir);
|
|
82
|
-
const dstCompose = path.join(dst, dir);
|
|
83
|
-
|
|
84
|
-
// The dir we want to copy, doesn't exist.
|
|
85
|
-
if (!(await pathExists(srcCompose))) {
|
|
86
|
-
GriddoLog.info(`(Maybe first render) Source directory does not exist: ${srcCompose}`);
|
|
87
|
-
continue;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
// Create the backup
|
|
91
|
-
if (withBackup) {
|
|
92
|
-
await createBackup(dstCompose);
|
|
93
|
-
GriddoLog.verbose(`create backup: ${dstCompose}`);
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
// Copy directory
|
|
97
|
-
try {
|
|
98
|
-
// First clean destination
|
|
99
|
-
if (await pathExists(dstCompose)) {
|
|
100
|
-
await fsp.rm(dstCompose, { recursive: true, force: true });
|
|
101
|
-
GriddoLog.verbose(`clean destination: ${dstCompose}`);
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
// Then copy src to dst
|
|
105
|
-
await fsp.cp(srcCompose, dstCompose, {
|
|
106
|
-
recursive: true,
|
|
107
|
-
preserveTimestamps: true,
|
|
108
|
-
});
|
|
109
|
-
GriddoLog.verbose(`copy: ${srcCompose} to ${dstCompose}`);
|
|
110
|
-
|
|
111
|
-
if (withBackup) {
|
|
112
|
-
await deleteBackup(dstCompose);
|
|
113
|
-
GriddoLog.verbose(`delete backup: ${dstCompose}`);
|
|
114
|
-
}
|
|
115
|
-
} catch (error) {
|
|
116
|
-
if (withBackup) {
|
|
117
|
-
await restoreBackup(dstCompose);
|
|
118
|
-
GriddoLog.verbose("Backup has been restored.");
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
throwError(ArtifactError, error);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
/**
|
|
127
|
-
* Move artifacts between cx-paths
|
|
128
|
-
*
|
|
129
|
-
* @param src - Source directory.
|
|
130
|
-
* @param dst - Destination directory.
|
|
131
|
-
* @param dirs - Directories to move.
|
|
132
|
-
* @param options - Options.
|
|
133
|
-
*/
|
|
134
|
-
async function mvDirs(
|
|
135
|
-
src: string,
|
|
136
|
-
dst: string,
|
|
137
|
-
dirs: string[],
|
|
138
|
-
options?: { withBackup?: boolean; override?: boolean },
|
|
139
|
-
) {
|
|
140
|
-
const { override, withBackup } = options || {};
|
|
141
|
-
|
|
142
|
-
for (const dir of dirs) {
|
|
143
|
-
const srcCompose = path.join(src, dir);
|
|
144
|
-
const dstCompose = path.join(dst, dir);
|
|
145
|
-
|
|
146
|
-
if (!(await pathExists(srcCompose))) {
|
|
147
|
-
continue;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
if (withBackup) {
|
|
151
|
-
await createBackup(dstCompose);
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
try {
|
|
155
|
-
// Clean destination
|
|
156
|
-
if (override && (await pathExists(dstCompose))) {
|
|
157
|
-
await fsp.rm(dstCompose, { recursive: true, force: true });
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
await fsp.rename(srcCompose, dstCompose);
|
|
161
|
-
GriddoLog.verbose(`moved: ${srcCompose} to ${dstCompose}`);
|
|
162
|
-
|
|
163
|
-
if (withBackup) {
|
|
164
|
-
await deleteBackup(dstCompose);
|
|
165
|
-
}
|
|
166
|
-
} catch (error) {
|
|
167
|
-
if (withBackup) {
|
|
168
|
-
await restoreBackup(dstCompose);
|
|
169
|
-
GriddoLog.info("Backup has been restored.");
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
throwError(ArtifactError, error);
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
/**
|
|
178
|
-
* Removes multiple artifact directories.
|
|
179
|
-
*
|
|
180
|
-
* @param dirs - An array of directory paths.
|
|
181
|
-
*/
|
|
182
|
-
async function rmDirs(dirs: string[]) {
|
|
183
|
-
for (const dir of dirs) {
|
|
184
|
-
try {
|
|
185
|
-
await fsp.rm(dir, { recursive: true, force: true });
|
|
186
|
-
GriddoLog.verbose(`artifact removed: ${dir}`);
|
|
187
|
-
} catch (error) {
|
|
188
|
-
throwError(ArtifactError, error);
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
async function restoreBackup(src: string, suffix = "-BACKUP") {
|
|
194
|
-
const dst = src + suffix;
|
|
195
|
-
try {
|
|
196
|
-
await fsp.rename(dst, src);
|
|
197
|
-
GriddoLog.info(`Backup ${dst} has been restored`);
|
|
198
|
-
} catch (_error) {
|
|
199
|
-
throw new Error(`Error while delete ${dst} backup`);
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
async function deleteBackup(src: string, suffix = "-BACKUP") {
|
|
204
|
-
const dst = src + suffix;
|
|
205
|
-
|
|
206
|
-
if (!(await pathExists(dst))) {
|
|
207
|
-
return;
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
try {
|
|
211
|
-
await fsp.rm(dst, { recursive: true, force: true });
|
|
212
|
-
GriddoLog.verbose(`Backup ${dst} has been deleted`);
|
|
213
|
-
} catch (_error) {
|
|
214
|
-
throw new Error(`Error while delete ${dst} backup`);
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
async function createBackup(src: string, suffix = "-BACKUP") {
|
|
219
|
-
const dst = src + suffix;
|
|
220
|
-
|
|
221
|
-
if (!(await pathExists(src))) {
|
|
222
|
-
return;
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
if (await pathExists(dst)) {
|
|
226
|
-
GriddoLog.warn(`Destination ${dst} already exists`);
|
|
227
|
-
return;
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
try {
|
|
231
|
-
await fsp.rename(src, dst);
|
|
232
|
-
GriddoLog.verbose(`Backup of ${src} has been created in ${dst}`);
|
|
233
|
-
} catch (error) {
|
|
234
|
-
GriddoLog.error(`Error while coping ${src} to ${dst} backup`);
|
|
235
|
-
throwError(ArtifactError, error);
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
/**
|
|
240
|
-
* Return true if the site folder is empty or only has xml files. (Recursively)
|
|
241
|
-
*/
|
|
242
|
-
async function siteIsEmpty(sitePath: string) {
|
|
243
|
-
const siteFiles = (
|
|
244
|
-
await fsp.readdir(sitePath, {
|
|
245
|
-
withFileTypes: true,
|
|
246
|
-
recursive: true,
|
|
247
|
-
})
|
|
248
|
-
).filter((file) => file.isFile() && !path.basename(file.name).startsWith("."));
|
|
249
|
-
|
|
250
|
-
const xmlFiles = siteFiles.filter((file) => file.name.endsWith(".xml"));
|
|
251
|
-
|
|
252
|
-
if (siteFiles.length === xmlFiles.length) {
|
|
253
|
-
return true;
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
/**
|
|
258
|
-
* Delete empty directories from the given directory in a recursive way.
|
|
259
|
-
*/
|
|
260
|
-
async function deleteEmptyDirectories(dirPath: string) {
|
|
261
|
-
try {
|
|
262
|
-
const stats = await fsp.stat(dirPath);
|
|
263
|
-
|
|
264
|
-
// Si no es un directorio, no hacemos nada
|
|
265
|
-
if (!stats.isDirectory()) {
|
|
266
|
-
return;
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
let filesInDirectory: string[];
|
|
270
|
-
try {
|
|
271
|
-
filesInDirectory = await fsp.readdir(dirPath);
|
|
272
|
-
} catch (err: any) {
|
|
273
|
-
// Si el directorio no existe o no se puede leer (ej. permisos), lo saltamos.
|
|
274
|
-
if (err.code === "ENOENT") {
|
|
275
|
-
GriddoLog.warn(`The directory "${dirPath}" does not exist, skipping it.`);
|
|
276
|
-
return;
|
|
277
|
-
}
|
|
278
|
-
GriddoLog.error(`Error al leer el directorio "${dirPath}":`, err);
|
|
279
|
-
throw err; // Re-lanza el error para que sea manejado por el llamador
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
// Recorrer los contenidos del directorio
|
|
283
|
-
for (const file of filesInDirectory) {
|
|
284
|
-
const fullPath = path.join(dirPath, file);
|
|
285
|
-
await deleteEmptyDirectories(fullPath); // Llamada recursiva síncrona
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
// Después de procesar todos los subdirectorios, verifica si el directorio actual está vacío
|
|
289
|
-
const remainingFiles = await fsp.readdir(dirPath);
|
|
290
|
-
|
|
291
|
-
if (remainingFiles.length === 0) {
|
|
292
|
-
try {
|
|
293
|
-
await fsp.rmdir(dirPath);
|
|
294
|
-
GriddoLog.verbose(`Remove empty directory: ${dirPath}`);
|
|
295
|
-
} catch (err: any) {
|
|
296
|
-
// Puede que haya habido un problema de concurrencia o permisos
|
|
297
|
-
if (err.code === "ENOENT") {
|
|
298
|
-
GriddoLog.warn(
|
|
299
|
-
`El directorio "${dirPath}" ya no existe. Posiblemente fue borrado por otra operación.`,
|
|
300
|
-
);
|
|
301
|
-
} else {
|
|
302
|
-
GriddoLog.error(`Error al borrar el directorio "${dirPath}":`, err);
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
} catch (err: any) {
|
|
307
|
-
if (err.code === "ENOENT") {
|
|
308
|
-
// El directorio ya no existe, no es un error para nosotros en este contexto
|
|
309
|
-
GriddoLog.warn(`The directory "${dirPath}" does not exist or has already been processed.`);
|
|
310
|
-
} else {
|
|
311
|
-
GriddoLog.error(`General error general while processing "${dirPath}":`, err);
|
|
312
|
-
throw err;
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
async function pathExists(dir: string) {
|
|
318
|
-
try {
|
|
319
|
-
await fsp.access(dir);
|
|
320
|
-
return true;
|
|
321
|
-
} catch {
|
|
322
|
-
return false;
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
/**
|
|
327
|
-
* Busca recursivamente archivos que terminen con un sufijo específico dentro de un directorio.
|
|
328
|
-
* Esta función es un generador asíncrono, lo que la hace muy eficiente en uso de memoria.
|
|
329
|
-
*
|
|
330
|
-
* @param dir El directorio base para comenzar la búsqueda.
|
|
331
|
-
* @param suffix El sufijo con el que deben terminar los nombres de archivo (ej: 'page-data.json').
|
|
332
|
-
* @returns Un generador asíncrono que produce la ruta completa de cada archivo encontrado.
|
|
333
|
-
* @throws Si el directorio inicial `dir` no existe o no se puede leer.
|
|
334
|
-
*/
|
|
335
|
-
async function* findFilesBySuffix(dir: string, suffix: string): AsyncGenerator<string> {
|
|
336
|
-
const dirHandle = await fsp.opendir(dir);
|
|
337
|
-
for await (const item of dirHandle) {
|
|
338
|
-
const fullPath = path.join(dir, item.name);
|
|
339
|
-
if (item.isDirectory()) {
|
|
340
|
-
// yield* para encadenar otro generator.
|
|
341
|
-
yield* findFilesBySuffix(fullPath, suffix);
|
|
342
|
-
} else if (item.isFile() && item.name.endsWith(suffix)) {
|
|
343
|
-
yield fullPath;
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
/**
|
|
349
|
-
* Walk a directory and returns the JSON file absolute paths with one level of depth.
|
|
350
|
-
* /abs/.../sotre/331/158.json
|
|
351
|
-
* /abs/.../sotre/114/443.json
|
|
352
|
-
* /abs/.../sotre/131/217.json
|
|
353
|
-
* /abs/.../sotre/191/281.json
|
|
354
|
-
*/
|
|
355
|
-
async function* walkStore(storeDir: string): AsyncGenerator<string> {
|
|
356
|
-
const storeDirHandle = await fsp.opendir(storeDir);
|
|
357
|
-
|
|
358
|
-
for await (const siteDirent of storeDirHandle) {
|
|
359
|
-
if (siteDirent.isDirectory()) {
|
|
360
|
-
const siteDirPath = path.join(storeDir, siteDirent.name);
|
|
361
|
-
const siteDirHandle = await fsp.opendir(siteDirPath);
|
|
362
|
-
|
|
363
|
-
for await (const fileDirent of siteDirHandle) {
|
|
364
|
-
const filePath = path.join(siteDirPath, fileDirent.name);
|
|
365
|
-
|
|
366
|
-
if (fileDirent.isFile() && path.extname(filePath) === ".json") {
|
|
367
|
-
yield filePath;
|
|
368
|
-
}
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
|
|
374
|
-
export {
|
|
375
|
-
cpDirs,
|
|
376
|
-
deleteDisposableSiteDirs,
|
|
377
|
-
deleteEmptyDirectories,
|
|
378
|
-
findFilesBySuffix,
|
|
379
|
-
mkDirs,
|
|
380
|
-
mvDirs,
|
|
381
|
-
pathExists,
|
|
382
|
-
renamePath,
|
|
383
|
-
rmDirs,
|
|
384
|
-
walkStore,
|
|
385
|
-
};
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import type { LifeCycleAction } from "../shared/types/global";
|
|
2
|
-
|
|
3
|
-
import { LifecycleExecutionError } from "../shared/errors";
|
|
4
|
-
import { brush } from "../shared/npm-modules/brush";
|
|
5
|
-
import { throwError } from "./errors";
|
|
6
|
-
import { GriddoLog } from "./GriddoLog";
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Measures the execution time of a series of sync or async functions.
|
|
10
|
-
*
|
|
11
|
-
* @async
|
|
12
|
-
* @param functions - Functions to be executed to measure their execution time.
|
|
13
|
-
* @returns A promise that resolves with the total execution time in seconds.
|
|
14
|
-
*/
|
|
15
|
-
async function executeAndReturnExecutionTime<T>(func: () => T | Promise<T>): Promise<number> {
|
|
16
|
-
const start = process.hrtime.bigint();
|
|
17
|
-
await Promise.resolve(func());
|
|
18
|
-
const end = process.hrtime.bigint();
|
|
19
|
-
return Number((Number(end - start) / 1e9).toFixed(3));
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Executes a life cycle process, which involves executing a callback
|
|
24
|
-
* function, printing to the console, and handling errors with optional retries.
|
|
25
|
-
*
|
|
26
|
-
* @async
|
|
27
|
-
* @param name - The name of the life cycle.
|
|
28
|
-
* @param action - A callback function to execute.
|
|
29
|
-
* @param options - Optional configuration for the life cycle process.
|
|
30
|
-
* @param options.maxRetrys - The maximum number of retries for the life cycle.
|
|
31
|
-
* @param options.enabled - Whether the life cycle process should be executed.
|
|
32
|
-
* @returns - A promise that resolves when the life cycle process is completed.
|
|
33
|
-
*/
|
|
34
|
-
async function doLifeCycle(
|
|
35
|
-
name: string,
|
|
36
|
-
action: LifeCycleAction,
|
|
37
|
-
options?: {
|
|
38
|
-
maxRetrys?: number;
|
|
39
|
-
skip?: undefined | false | string;
|
|
40
|
-
},
|
|
41
|
-
) {
|
|
42
|
-
const { maxRetrys = 3, skip } = options || {};
|
|
43
|
-
|
|
44
|
-
if (skip) {
|
|
45
|
-
GriddoLog.info(`Skiping life-cycle ${name}. Reason: ${skip}\n`);
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
let trysCount = 0;
|
|
50
|
-
|
|
51
|
-
while (trysCount < maxRetrys) {
|
|
52
|
-
try {
|
|
53
|
-
GriddoLog.info(`start ${name} life-cycle`);
|
|
54
|
-
const exeTime = await executeAndReturnExecutionTime(action);
|
|
55
|
-
GriddoLog.success(`${name} - ${exeTime}s\n`);
|
|
56
|
-
break;
|
|
57
|
-
} catch (error) {
|
|
58
|
-
const errorString = brush.red(` Error in ${name} LifeCycle `);
|
|
59
|
-
const attemptsString = brush.yellow(`Attempt (${trysCount + 1})`);
|
|
60
|
-
GriddoLog.log(`\n${errorString} ${attemptsString}\n`);
|
|
61
|
-
GriddoLog.log(error);
|
|
62
|
-
GriddoLog.log();
|
|
63
|
-
|
|
64
|
-
trysCount++;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
if (trysCount === maxRetrys) {
|
|
69
|
-
throwError(LifecycleExecutionError(maxRetrys, name));
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
export { doLifeCycle, executeAndReturnExecutionTime };
|
package/exporter/core/logger.ts
DELETED
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
import type { RenderDB } from "../shared/types/render";
|
|
2
|
-
|
|
3
|
-
import fsp from "node:fs/promises";
|
|
4
|
-
import path from "node:path";
|
|
5
|
-
|
|
6
|
-
import {
|
|
7
|
-
GRIDDO_BUILD_LOGS,
|
|
8
|
-
GRIDDO_BUILD_LOGS_BUFFER_SIZE,
|
|
9
|
-
// GRIDDO_BUILD_LOGS_TO_FILE,
|
|
10
|
-
} from "../shared/envs";
|
|
11
|
-
import { readDB } from "./db";
|
|
12
|
-
import { GriddoLog } from "./GriddoLog";
|
|
13
|
-
|
|
14
|
-
const logBuffer: string[] = [];
|
|
15
|
-
let logFilePath: string | null = null;
|
|
16
|
-
let flushPromise: Promise<void> | null = null;
|
|
17
|
-
const LOG_BUFFER_FLUSH_THRESHOLD = GRIDDO_BUILD_LOGS_BUFFER_SIZE;
|
|
18
|
-
const LOG_FILENAME = "render-detail-log.txt";
|
|
19
|
-
const LOG_TO_FILE_IS_DISABLED = !GRIDDO_BUILD_LOGS; // || !GRIDDO_BUILD_LOGS_TO_FILE;
|
|
20
|
-
|
|
21
|
-
let dbData: RenderDB | null = null;
|
|
22
|
-
|
|
23
|
-
// Universal data cache for this module...
|
|
24
|
-
async function getDBData() {
|
|
25
|
-
if (!dbData) {
|
|
26
|
-
dbData = await readDB();
|
|
27
|
-
}
|
|
28
|
-
return dbData;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
async function initializeLogFile() {
|
|
32
|
-
if (LOG_TO_FILE_IS_DISABLED) {
|
|
33
|
-
return;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
const data = await getDBData();
|
|
37
|
-
logFilePath = path.join(data.paths.root, LOG_FILENAME);
|
|
38
|
-
|
|
39
|
-
await fsp.rm(logFilePath, { force: true });
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
function addLogToBuffer(lineContent: string) {
|
|
43
|
-
if (LOG_TO_FILE_IS_DISABLED) {
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
logBuffer.push(lineContent.toString());
|
|
48
|
-
|
|
49
|
-
if (logBuffer.length >= LOG_BUFFER_FLUSH_THRESHOLD) {
|
|
50
|
-
// Fire-and-forget flush to avoid blocking the main thread.
|
|
51
|
-
flushLogsToFile().catch((error) => {
|
|
52
|
-
GriddoLog.error("Background log flush failed:", error);
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* Vuelca el contenido del buffer de logs al archivo de logs en disco.
|
|
59
|
-
* Si el buffer está vacío, ya se está volcando, o no hay ruta de archivo, no hace nada.
|
|
60
|
-
* Si ocurre un error al escribir, los logs se reinsertan al buffer para reintentar en el siguiente flush.
|
|
61
|
-
*/
|
|
62
|
-
async function flushLogsToFile() {
|
|
63
|
-
// Si ya hay un volcado en curso, espera a que termine.
|
|
64
|
-
if (flushPromise) {
|
|
65
|
-
await flushPromise;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
if (logBuffer.length === 0 || !logFilePath) {
|
|
69
|
-
return;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
const performFlush = async () => {
|
|
73
|
-
const logsToFlush = [...logBuffer];
|
|
74
|
-
logBuffer.length = 0;
|
|
75
|
-
|
|
76
|
-
try {
|
|
77
|
-
await fsp.appendFile(logFilePath!, `${logsToFlush.join("\n")}\n`);
|
|
78
|
-
} catch (error) {
|
|
79
|
-
logBuffer.unshift(...logsToFlush);
|
|
80
|
-
GriddoLog.error("Error flushing logs:", error);
|
|
81
|
-
// No relanzamos el error para no detener el "fire-and-forget"
|
|
82
|
-
}
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
flushPromise = performFlush();
|
|
86
|
-
|
|
87
|
-
try {
|
|
88
|
-
await flushPromise;
|
|
89
|
-
} finally {
|
|
90
|
-
flushPromise = null;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* Copia el archivo de log detallado de renderizado ("render-detail-log.txt")
|
|
96
|
-
* desde el directorio raíz del proyecto al directorio de logs del dominio en exports,
|
|
97
|
-
* usando una marca de tiempo en el nombre de destino.
|
|
98
|
-
* Si el archivo no existe, ignora el error salvo que sea distinto de ENOENT.
|
|
99
|
-
*
|
|
100
|
-
* @param domain - Nombre del dominio para el que se guarda el log.
|
|
101
|
-
*/
|
|
102
|
-
async function saveDetailRenderLog(domain: string) {
|
|
103
|
-
await flushLogsToFile();
|
|
104
|
-
|
|
105
|
-
const data = await getDBData();
|
|
106
|
-
|
|
107
|
-
const dateString = getFormattedDateTime();
|
|
108
|
-
const debugDir = path.join(data.paths.exportsDir, domain, "logs");
|
|
109
|
-
|
|
110
|
-
await fsp.mkdir(debugDir, { recursive: true });
|
|
111
|
-
|
|
112
|
-
const src = path.join(data.paths.root, LOG_FILENAME);
|
|
113
|
-
const dst = path.join(debugDir, `${dateString}-${LOG_FILENAME}`);
|
|
114
|
-
|
|
115
|
-
// Move log to exports
|
|
116
|
-
try {
|
|
117
|
-
await fsp.cp(src, dst);
|
|
118
|
-
} catch (error) {
|
|
119
|
-
// It's possible the file doesn't exist if GRIDDO_BUILD_LOGS is false
|
|
120
|
-
// or if no logs were ever added.
|
|
121
|
-
if (error instanceof Error && "code" in error && error.code !== "ENOENT") {
|
|
122
|
-
throw error;
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
function getFormattedDateTime() {
|
|
128
|
-
const now = new Date();
|
|
129
|
-
const year = now.getFullYear();
|
|
130
|
-
const month = String(now.getMonth() + 1).padStart(2, "0");
|
|
131
|
-
const day = String(now.getDate()).padStart(2, "0");
|
|
132
|
-
|
|
133
|
-
const hours = String(now.getHours()).padStart(2, "0");
|
|
134
|
-
const minutes = String(now.getMinutes()).padStart(2, "0");
|
|
135
|
-
const seconds = String(now.getSeconds()).padStart(2, "0");
|
|
136
|
-
|
|
137
|
-
// Formato recomendado para ordenación de archivos: YYYY-MM-DD_HH-mm-ss
|
|
138
|
-
return `${year}-${month}-${day}_${hours}-${minutes}-${seconds}`;
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
export { addLogToBuffer, flushLogsToFile, initializeLogFile, saveDetailRenderLog };
|
package/exporter/core/objects.ts
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Busca de forma recursiva si ALGUNA de las claves de un array existe como propiedad propia
|
|
3
|
-
* en un objeto anidado. La búsqueda se detiene en cuanto se encuentra la primera coincidencia.
|
|
4
|
-
*
|
|
5
|
-
* @param obj El objeto a inspeccionar.
|
|
6
|
-
* @param keysToFind Un array de claves que se buscan.
|
|
7
|
-
* @param visited Un WeakSet para evitar ciclos de referencia.
|
|
8
|
-
* @returns Retorna `true` si al menos una de las claves se encuentra, de lo contrario `false`.
|
|
9
|
-
*/
|
|
10
|
-
function hasAnyKeyDeep<T extends object>(
|
|
11
|
-
obj: T,
|
|
12
|
-
keysToFind: string[],
|
|
13
|
-
visited = new WeakSet<object>(),
|
|
14
|
-
): boolean {
|
|
15
|
-
// 1. Casos base: no procesar no-objetos, si ya lo visitamos, o si el array de claves está vacío.
|
|
16
|
-
if (typeof obj !== "object" || obj === null || visited.has(obj)) {
|
|
17
|
-
return false;
|
|
18
|
-
}
|
|
19
|
-
if (keysToFind.length === 0) {
|
|
20
|
-
return false;
|
|
21
|
-
}
|
|
22
|
-
visited.add(obj);
|
|
23
|
-
|
|
24
|
-
// 2. Comprobar si ALGUNA de las claves buscadas es una propiedad propia del objeto actual.
|
|
25
|
-
// Usamos .some() porque se detiene en la primera coincidencia (eficiencia).
|
|
26
|
-
const foundKey = keysToFind.some((key) => Object.hasOwn(obj, key));
|
|
27
|
-
if (foundKey) {
|
|
28
|
-
return true;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
// 3. Si no se encontró ninguna clave en este nivel, recorrer los valores y buscar recursivamente.
|
|
32
|
-
return Object.values(obj).some(
|
|
33
|
-
(value) => typeof value === "object" && hasAnyKeyDeep(value, keysToFind, visited),
|
|
34
|
-
);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export { hasAnyKeyDeep };
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import fsp from "node:fs/promises";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
|
|
4
|
-
import { brush } from "../shared/npm-modules/brush";
|
|
5
|
-
import { GriddoLog } from "./GriddoLog";
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Console log the Griddo exporter version.
|
|
9
|
-
*/
|
|
10
|
-
async function showExporterVersion() {
|
|
11
|
-
// console.clear();
|
|
12
|
-
const { version } = JSON.parse(
|
|
13
|
-
await fsp.readFile(path.resolve(__dirname, "../..", "package.json"), "utf-8"),
|
|
14
|
-
) as { version: string };
|
|
15
|
-
const logo = `\n${brush.yellow(`Griddo Exporter ${version}`)}
|
|
16
|
-
${brush.dim(`Node ${process.version.slice(1)}`)}\n`;
|
|
17
|
-
|
|
18
|
-
GriddoLog.log(logo);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export { showExporterVersion };
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { useEffect } from "react";
|
|
2
|
-
|
|
3
|
-
const DynamicScript = (props: { scriptContent: string }) => {
|
|
4
|
-
const { scriptContent } = props;
|
|
5
|
-
|
|
6
|
-
useEffect(() => {
|
|
7
|
-
if (!scriptContent) {
|
|
8
|
-
return;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
const scriptText = scriptContent.replace(/<script>|<\/script>/g, "");
|
|
12
|
-
if (!scriptText.trim()) {
|
|
13
|
-
return;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
const script = document.createElement("script");
|
|
17
|
-
script.innerHTML = scriptText;
|
|
18
|
-
script.async = true;
|
|
19
|
-
|
|
20
|
-
document.body.appendChild(script);
|
|
21
|
-
|
|
22
|
-
return () => {
|
|
23
|
-
// Hacemos un chequeo por si el script ya fue removido por otro proceso.
|
|
24
|
-
if (document.body.contains(script)) {
|
|
25
|
-
document.body.removeChild(script);
|
|
26
|
-
}
|
|
27
|
-
};
|
|
28
|
-
}, [scriptContent]);
|
|
29
|
-
|
|
30
|
-
return null;
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
export { DynamicScript };
|