@griddo/cx 1.75.178 → 1.75.180
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 +22 -14
- package/build/index.js +49 -0
- package/gatsby-browser.tsx +140 -0
- package/gatsby-config.ts +40 -0
- package/gatsby-node.ts +130 -0
- package/gatsby-ssr.tsx +63 -0
- package/index.js +4 -0
- package/package.json +119 -100
- package/scripts/build-reset.ts +9 -0
- package/scripts/griddo-exporter.ts +302 -0
- package/src/components/Head.tsx +207 -0
- package/src/components/template.tsx +90 -0
- package/src/components/types.ts +35 -0
- package/src/components/utils.ts +138 -0
- package/src/html.tsx +31 -0
- package/src/services/auth.ts +64 -0
- package/src/services/distributors.ts +153 -0
- package/src/services/domains.ts +27 -0
- package/src/services/navigation.ts +169 -0
- package/src/services/robots.ts +64 -0
- package/src/services/settings.ts +52 -0
- package/src/services/sites.ts +199 -0
- package/src/services/store-with-for-loop.ts +513 -0
- package/src/services/store-with-promise-all.ts +515 -0
- package/src/services/store.ts +513 -0
- package/src/types/api.ts +155 -0
- package/src/types/global.ts +72 -0
- package/src/types/navigation.ts +25 -0
- package/src/types/pages.ts +145 -0
- package/src/types/sites.ts +64 -0
- package/src/types/templates.ts +11 -0
- package/src/utils/api.ts +326 -0
- package/src/utils/cache.ts +114 -0
- package/src/utils/domains.ts +32 -0
- package/src/utils/folders.ts +147 -0
- package/src/utils/instance.ts +71 -0
- package/src/utils/pages.ts +534 -0
- package/src/utils/searches.ts +102 -0
- package/src/utils/shared.ts +131 -0
- package/src/utils/sites.ts +280 -0
- package/.babelrc +0 -7
- package/LICENSE +0 -1
- package/gatsby-browser.js +0 -115
- package/gatsby-config.js +0 -38
- package/gatsby-node.js +0 -273
- package/gatsby-ssr.js +0 -43
- package/scripts/griddo-exporter.js +0 -133
- package/src/api/index.js +0 -172
- package/src/components/template.js +0 -261
- package/src/html.js +0 -30
- package/src/images/readme.md +0 -1
- package/src/scripts/build-reset.js +0 -12
- package/src/services/auth.js +0 -44
- package/src/services/distributors.js +0 -85
- package/src/services/domains.js +0 -16
- package/src/services/navigation.js +0 -104
- package/src/services/robots.js +0 -37
- package/src/services/settings.js +0 -25
- package/src/services/sites.js +0 -110
- package/src/utils/cache.js +0 -70
- package/src/utils/component-lib-helpers.js +0 -56
- package/src/utils/dataLayer.js +0 -47
- package/src/utils/delay.js +0 -5
- package/src/utils/domains.js +0 -24
- package/src/utils/folders.js +0 -123
- package/src/utils/helpers.js +0 -144
- package/src/utils/index.js +0 -44
- package/src/utils/package.js +0 -20
- package/src/utils/pages.js +0 -236
- package/src/utils/searches.js +0 -62
- package/src/utils/sites.js +0 -207
- package/static/griddo-full-logo.png +0 -0
package/src/utils/pages.js
DELETED
|
@@ -1,236 +0,0 @@
|
|
|
1
|
-
const path = require('path');
|
|
2
|
-
const fs = require('fs-extra');
|
|
3
|
-
const { postSearchInfo } = require('./searches');
|
|
4
|
-
const helpers = require('./helpers.js');
|
|
5
|
-
|
|
6
|
-
require('dotenv').config();
|
|
7
|
-
|
|
8
|
-
// Envs
|
|
9
|
-
const GRIDDO_SEARCH_FEATURE = !!JSON.parse(
|
|
10
|
-
process.env.GRIDDO_SEARCH_FEATURE || 'false'
|
|
11
|
-
);
|
|
12
|
-
|
|
13
|
-
async function renderPage(page, additionalInfo, createPage) {
|
|
14
|
-
const { multiPageElements, ...cleanPage } = page;
|
|
15
|
-
|
|
16
|
-
if (!multiPageElements)
|
|
17
|
-
return await renderSinglePage(cleanPage, additionalInfo, createPage);
|
|
18
|
-
|
|
19
|
-
await renderMultiplePages(page, additionalInfo, createPage);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
async function renderSinglePage(page, additionalInfo, createPage) {
|
|
23
|
-
const { id, name, title, fullPath, language: languageId, breadcrumb } = page;
|
|
24
|
-
helpers.log('info', `renderSinglePage: ${id}`);
|
|
25
|
-
|
|
26
|
-
const {
|
|
27
|
-
baseUrl,
|
|
28
|
-
siteSlug,
|
|
29
|
-
theme,
|
|
30
|
-
siteMetadata,
|
|
31
|
-
socials,
|
|
32
|
-
siteLangs,
|
|
33
|
-
navigations: { header, footer },
|
|
34
|
-
cloudinaryName,
|
|
35
|
-
siteOptions,
|
|
36
|
-
componentsVersion,
|
|
37
|
-
griddoVersion,
|
|
38
|
-
BUILD_MODE,
|
|
39
|
-
sitePages,
|
|
40
|
-
siteScript,
|
|
41
|
-
} = additionalInfo;
|
|
42
|
-
|
|
43
|
-
// 3 - Build final page object
|
|
44
|
-
page = {
|
|
45
|
-
...page,
|
|
46
|
-
breadcrumb,
|
|
47
|
-
siteSlug,
|
|
48
|
-
apiUrl: baseUrl,
|
|
49
|
-
publicApiUrl: additionalInfo.publicBaseUrl,
|
|
50
|
-
instance: additionalInfo.instance,
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
const filepath = `${fullPath.domain}${fullPath.compose}`;
|
|
54
|
-
|
|
55
|
-
const locale = siteLangs
|
|
56
|
-
.find(lang => lang.id === page.language)
|
|
57
|
-
.locale.replace(/_/g, '-');
|
|
58
|
-
|
|
59
|
-
// PAGE METADATA
|
|
60
|
-
const pageMetadata = helpers.getPageMetaData(page);
|
|
61
|
-
|
|
62
|
-
// OPENGRAPH
|
|
63
|
-
const openGraph = helpers.getOpenGraph(page);
|
|
64
|
-
|
|
65
|
-
const mappedPage = {
|
|
66
|
-
path: filepath,
|
|
67
|
-
// `component` necesita un path absoluto, por eso se usa resolve
|
|
68
|
-
component: path.resolve(__dirname, `../components/template.js`),
|
|
69
|
-
context: {
|
|
70
|
-
// PAGE
|
|
71
|
-
id,
|
|
72
|
-
name,
|
|
73
|
-
title,
|
|
74
|
-
fullPath,
|
|
75
|
-
locale,
|
|
76
|
-
languageId,
|
|
77
|
-
theme,
|
|
78
|
-
// PARA <Helmet />
|
|
79
|
-
siteMetadata,
|
|
80
|
-
pageMetadata,
|
|
81
|
-
openGraph,
|
|
82
|
-
socials,
|
|
83
|
-
siteLangs,
|
|
84
|
-
cloudinaryName,
|
|
85
|
-
siteOptions,
|
|
86
|
-
BUILD_MODE,
|
|
87
|
-
componentsVersion,
|
|
88
|
-
griddoVersion,
|
|
89
|
-
sitePages,
|
|
90
|
-
siteScript,
|
|
91
|
-
|
|
92
|
-
// NAVIGATION SECTIONS
|
|
93
|
-
header,
|
|
94
|
-
footer,
|
|
95
|
-
|
|
96
|
-
// PAGE TEMPLATE
|
|
97
|
-
page,
|
|
98
|
-
},
|
|
99
|
-
};
|
|
100
|
-
|
|
101
|
-
const assetPrefix =
|
|
102
|
-
fullPath.domain.startsWith('/pro-') && !!process.env.ASSET_PREFIX
|
|
103
|
-
? process.env.ASSET_PREFIX
|
|
104
|
-
: undefined;
|
|
105
|
-
|
|
106
|
-
if (assetPrefix) mappedPage.matchPath = fullPath.compose;
|
|
107
|
-
|
|
108
|
-
await createPage(mappedPage);
|
|
109
|
-
|
|
110
|
-
if (GRIDDO_SEARCH_FEATURE) {
|
|
111
|
-
const exportFile = path.resolve(
|
|
112
|
-
__dirname,
|
|
113
|
-
'../../dist/',
|
|
114
|
-
`./${filepath}index.html`
|
|
115
|
-
);
|
|
116
|
-
|
|
117
|
-
const content = fs.existsSync(exportFile)
|
|
118
|
-
? fs.readFileSync(exportFile).toString()
|
|
119
|
-
: '';
|
|
120
|
-
|
|
121
|
-
await postSearchInfo({
|
|
122
|
-
title,
|
|
123
|
-
description: openGraph.description,
|
|
124
|
-
image: openGraph.image,
|
|
125
|
-
pageId: id,
|
|
126
|
-
languageId,
|
|
127
|
-
template: page.template_id || page?.template?.templateType || null,
|
|
128
|
-
siteId: page.site,
|
|
129
|
-
url: page.fullUrl,
|
|
130
|
-
content,
|
|
131
|
-
});
|
|
132
|
-
|
|
133
|
-
// Este return ???
|
|
134
|
-
// return content;
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
async function renderListPages(
|
|
139
|
-
{
|
|
140
|
-
rootPage,
|
|
141
|
-
pages,
|
|
142
|
-
isRoot,
|
|
143
|
-
defaultLang,
|
|
144
|
-
distributorTemplate,
|
|
145
|
-
totalQueriedItems,
|
|
146
|
-
},
|
|
147
|
-
additionalInfo,
|
|
148
|
-
createPage
|
|
149
|
-
) {
|
|
150
|
-
await pages.forEach(async (dataInPage, idx) => {
|
|
151
|
-
const isFirstPage = idx === 0;
|
|
152
|
-
const pageNumber = idx + 1;
|
|
153
|
-
const { domainUrl, compose } = rootPage.fullPath;
|
|
154
|
-
const addPageNumberToUrl = (url, addEndingSlash = false) =>
|
|
155
|
-
pageNumber > 1
|
|
156
|
-
? `${url}${url.endsWith('/') ? '' : '/'}${pageNumber}${
|
|
157
|
-
addEndingSlash ? `/` : ''
|
|
158
|
-
}`
|
|
159
|
-
: url;
|
|
160
|
-
const addPageNumberToTitle = title =>
|
|
161
|
-
title && pageNumber > 1 ? `${title} - ${pageNumber}` : title;
|
|
162
|
-
const paginatedPage = {
|
|
163
|
-
...rootPage,
|
|
164
|
-
fullPath: {
|
|
165
|
-
...rootPage.fullPath,
|
|
166
|
-
// Add a page number (tailPageNumber) from page 2 onwards
|
|
167
|
-
compose: addPageNumberToUrl(compose, true),
|
|
168
|
-
},
|
|
169
|
-
fullUrl: addPageNumberToUrl(rootPage.fullUrl, true),
|
|
170
|
-
slug: addPageNumberToUrl(rootPage.slug, false),
|
|
171
|
-
title: addPageNumberToTitle(rootPage.title),
|
|
172
|
-
metaTitle: addPageNumberToTitle(rootPage.metaTitle),
|
|
173
|
-
disableHrefLangs: pageNumber > 1,
|
|
174
|
-
template: {
|
|
175
|
-
...distributorTemplate,
|
|
176
|
-
isFirstPage,
|
|
177
|
-
pageNumber,
|
|
178
|
-
totalPages: pages.length,
|
|
179
|
-
// The base link, without page number to use in <Pagination />
|
|
180
|
-
// component.
|
|
181
|
-
baseLink: `${domainUrl}${compose}`,
|
|
182
|
-
queriedItems: dataInPage,
|
|
183
|
-
totalQueriedItems: totalQueriedItems?.length,
|
|
184
|
-
},
|
|
185
|
-
isRoot,
|
|
186
|
-
defaultLang,
|
|
187
|
-
};
|
|
188
|
-
await renderSinglePage(paginatedPage, additionalInfo, createPage);
|
|
189
|
-
});
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
async function renderMultiplePages(page, additionalInfo, createPage) {
|
|
193
|
-
const { multiPageElements: multiPageElementsBulk, ...cleanPage } = page;
|
|
194
|
-
const multiPageElements = JSON.parse(JSON.stringify(multiPageElementsBulk));
|
|
195
|
-
|
|
196
|
-
// si no hay un elemento sin slug, como mínimo hay que dibujar una página principal para el conjunto de páginas
|
|
197
|
-
if (!multiPageElements.find(({ sectionSlug }) => sectionSlug === '/'))
|
|
198
|
-
multiPageElements.push({});
|
|
199
|
-
|
|
200
|
-
// crear cada página
|
|
201
|
-
for (const pageElement of multiPageElements) {
|
|
202
|
-
const paginatedPage = JSON.parse(JSON.stringify(cleanPage));
|
|
203
|
-
const {
|
|
204
|
-
sectionSlug = '/',
|
|
205
|
-
title: bulkTitle = '',
|
|
206
|
-
metaTitle = '',
|
|
207
|
-
metaDescription = '',
|
|
208
|
-
} = pageElement;
|
|
209
|
-
const title = bulkTitle.content || bulkTitle;
|
|
210
|
-
const compose = paginatedPage?.fullPath?.compose || '';
|
|
211
|
-
const fullUrl = paginatedPage.fullUrl.endsWith('/')
|
|
212
|
-
? paginatedPage.fullUrl.slice(0, -1)
|
|
213
|
-
: paginatedPage.fullUrl;
|
|
214
|
-
const rightSectionSlug = sectionSlug?.replace(/\//g, '');
|
|
215
|
-
const newCompose = `${compose}${
|
|
216
|
-
compose.endsWith('/') ? '' : '/'
|
|
217
|
-
}${rightSectionSlug}`;
|
|
218
|
-
paginatedPage.fullUrl = `${fullUrl}/${rightSectionSlug}`;
|
|
219
|
-
paginatedPage.fullPath.compose = newCompose;
|
|
220
|
-
paginatedPage.slug = newCompose;
|
|
221
|
-
paginatedPage.template.activeSectionSlug = sectionSlug;
|
|
222
|
-
paginatedPage.template.activeSectionBase = fullUrl;
|
|
223
|
-
|
|
224
|
-
if (title.trim()) paginatedPage.title = title;
|
|
225
|
-
|
|
226
|
-
paginatedPage.metaTitle =
|
|
227
|
-
metaTitle.trim() || title.trim() || paginatedPage.metaTitle;
|
|
228
|
-
|
|
229
|
-
if (metaDescription.trim()) paginatedPage.metaDescription = metaDescription;
|
|
230
|
-
|
|
231
|
-
await renderSinglePage(paginatedPage, additionalInfo, createPage);
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
exports.renderPage = renderPage;
|
|
236
|
-
exports.renderListPages = renderListPages;
|
package/src/utils/searches.js
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
const { post } = require('../api');
|
|
2
|
-
|
|
3
|
-
const baseURL = process.env.API_URL;
|
|
4
|
-
|
|
5
|
-
async function postSearchInfo({
|
|
6
|
-
title,
|
|
7
|
-
description,
|
|
8
|
-
image,
|
|
9
|
-
pageId,
|
|
10
|
-
languageId,
|
|
11
|
-
siteId,
|
|
12
|
-
url,
|
|
13
|
-
content,
|
|
14
|
-
template,
|
|
15
|
-
}) {
|
|
16
|
-
const response = await post(`${baseURL}/search`, {
|
|
17
|
-
title,
|
|
18
|
-
description,
|
|
19
|
-
image,
|
|
20
|
-
pageId,
|
|
21
|
-
languageId,
|
|
22
|
-
siteId,
|
|
23
|
-
url,
|
|
24
|
-
template,
|
|
25
|
-
content: prepareHTMLContentForSearch(content),
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
return response;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
function prepareHTMLContentForSearch(content) {
|
|
32
|
-
const noTagsContent = removeHTMLTags(
|
|
33
|
-
['meta', 'link', 'style', 'script', 'noscript', 'nav', 'header', 'footer'],
|
|
34
|
-
content,
|
|
35
|
-
' '
|
|
36
|
-
);
|
|
37
|
-
const plainTextContent = stripHTMLTags(noTagsContent, ' ');
|
|
38
|
-
|
|
39
|
-
return stripSpaces(plainTextContent);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
function removeHTMLTags(tags, content, replaceWith = '') {
|
|
43
|
-
let filteredContent = content;
|
|
44
|
-
|
|
45
|
-
tags.map(tag => {
|
|
46
|
-
filteredContent = filteredContent
|
|
47
|
-
.replace(new RegExp(`<${tag}.*?>.*?<\/${tag}>`, 'gis'), replaceWith)
|
|
48
|
-
.replace(new RegExp(`(<${tag}([^>]+)>)`, 'gis'), replaceWith);
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
return filteredContent;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
function stripHTMLTags(content = '', replaceWith = '') {
|
|
55
|
-
return content.replace(/(<([^>]+)>)/gis, replaceWith);
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
function stripSpaces(str) {
|
|
59
|
-
return str.replace(/\s+/gis, ' ');
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
exports.postSearchInfo = postSearchInfo;
|
package/src/utils/sites.js
DELETED
|
@@ -1,207 +0,0 @@
|
|
|
1
|
-
const js2xmlparser = require('js2xmlparser');
|
|
2
|
-
const fs = require('fs-extra');
|
|
3
|
-
const path = require('path');
|
|
4
|
-
const helpers = require('../utils/helpers');
|
|
5
|
-
|
|
6
|
-
const SitesService = require('./../services/sites').default;
|
|
7
|
-
const AuthService = require('../services/auth').default;
|
|
8
|
-
const folders = require('./folders');
|
|
9
|
-
|
|
10
|
-
const baseUrl = process.env.API_URL;
|
|
11
|
-
const BYPASSRENDER = JSON.parse(process.env.BYPASSRENDER || false);
|
|
12
|
-
const updateAllSitesAlways = process.env.updateAllSites === 'on';
|
|
13
|
-
|
|
14
|
-
const testSite = process.env.testSite && parseInt(process.env.testSite);
|
|
15
|
-
const testPage = (process.env.testPage || '')
|
|
16
|
-
.split(',')
|
|
17
|
-
.map(item => !!item && parseInt(item.trim()))
|
|
18
|
-
.filter(item => !!item);
|
|
19
|
-
|
|
20
|
-
const checkSites = async () => {
|
|
21
|
-
await AuthService.login();
|
|
22
|
-
|
|
23
|
-
helpers.log('success', `ENV API URL - ${baseUrl}`);
|
|
24
|
-
|
|
25
|
-
const sites = await SitesService.getAll();
|
|
26
|
-
|
|
27
|
-
const updatedSites = updateAllSitesAlways
|
|
28
|
-
? sites.filter(site => !testSite || site.id === testSite)
|
|
29
|
-
: sites.filter(site =>
|
|
30
|
-
testSite ? site.id === testSite : !!site.shouldBeUpdated
|
|
31
|
-
);
|
|
32
|
-
|
|
33
|
-
if (updatedSites.length) {
|
|
34
|
-
for (const updatedSite of updatedSites) {
|
|
35
|
-
const langResponse = await SitesService.getLanguages(updatedSite.id);
|
|
36
|
-
updatedSite.domains = langResponse.items
|
|
37
|
-
.filter(
|
|
38
|
-
item =>
|
|
39
|
-
item.domain &&
|
|
40
|
-
(!process.env.DOMAIN ||
|
|
41
|
-
item.domain.slug.indexOf(process.env.DOMAIN) > 0)
|
|
42
|
-
)
|
|
43
|
-
.map(item => ({ [item.id]: `${item.domain.slug}${item.path}` }));
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
const sitesToRender = updatedSites.filter(site =>
|
|
48
|
-
testSite
|
|
49
|
-
? site.id === testSite
|
|
50
|
-
: !!site.isPublished && site.domains.length > 0
|
|
51
|
-
);
|
|
52
|
-
const sitesToUnpublish = updatedSites.filter(site => !site.isPublished);
|
|
53
|
-
|
|
54
|
-
return { sitesToRender, sitesToUnpublish };
|
|
55
|
-
};
|
|
56
|
-
|
|
57
|
-
const unpublishSites = async sites => {
|
|
58
|
-
for (const site of sites) {
|
|
59
|
-
const buildInfo = await SitesService.startPageRender(site.id);
|
|
60
|
-
helpers.log('success', 'UNPUBLISH SITE STARTS', buildInfo);
|
|
61
|
-
|
|
62
|
-
const { siteHash } = buildInfo;
|
|
63
|
-
const body = {
|
|
64
|
-
siteHash,
|
|
65
|
-
publishHashes: [],
|
|
66
|
-
unpublishHashes: [],
|
|
67
|
-
};
|
|
68
|
-
await SitesService.endPageRender(site.id, body);
|
|
69
|
-
}
|
|
70
|
-
await folders.deleteSites(sites);
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
const getSiteData = async (siteID, cached) => {
|
|
74
|
-
const buildData = await SitesService.startPageRender(siteID);
|
|
75
|
-
|
|
76
|
-
helpers.log('success', 'PAGE RENDER STARTS', buildData);
|
|
77
|
-
|
|
78
|
-
const siteInfo = await SitesService.getInfo(siteID, cached);
|
|
79
|
-
const siteLangs = await SitesService.getLanguages(siteID, cached);
|
|
80
|
-
const socials = await SitesService.getSocials(siteID, cached);
|
|
81
|
-
const siteLangsInfo = siteLangs.items;
|
|
82
|
-
const defaultLang = siteLangsInfo.find(lang => lang.isDefault);
|
|
83
|
-
|
|
84
|
-
// eliminado para validar que efectivamente no rompe nada
|
|
85
|
-
// si el cambio es correcto, hay que eliminar las 7 líneas que contienen "sitePages"
|
|
86
|
-
const sitePages = []; // await SitesService.getPages(siteID, cached);
|
|
87
|
-
|
|
88
|
-
const { siteHash, unpublishHashes, publishIds } = buildData;
|
|
89
|
-
const { headers, footers } = siteInfo;
|
|
90
|
-
|
|
91
|
-
const validPagesIds = testPage.length
|
|
92
|
-
? testPage.filter(item => publishIds.includes(item))
|
|
93
|
-
: publishIds;
|
|
94
|
-
|
|
95
|
-
return {
|
|
96
|
-
siteInfo,
|
|
97
|
-
validPagesIds,
|
|
98
|
-
siteHash,
|
|
99
|
-
unpublishHashes,
|
|
100
|
-
siteLangs: siteLangsInfo,
|
|
101
|
-
defaultLang,
|
|
102
|
-
headers,
|
|
103
|
-
footers,
|
|
104
|
-
socials,
|
|
105
|
-
sitePages,
|
|
106
|
-
};
|
|
107
|
-
};
|
|
108
|
-
|
|
109
|
-
const setPageRenderEnd = async (buildProcessData, createdPages) => {
|
|
110
|
-
for (const siteID in buildProcessData) {
|
|
111
|
-
const body = BYPASSRENDER
|
|
112
|
-
? { siteHash: null, unpublishHashes: [], publishHashes: [] }
|
|
113
|
-
: buildProcessData[siteID];
|
|
114
|
-
|
|
115
|
-
helpers.log('success', 'PAGE RENDER ENDS', body);
|
|
116
|
-
|
|
117
|
-
await SitesService.endPageRender(siteID, body);
|
|
118
|
-
helpers.log('success', `DEPLOYING ENDING CALL TO SITE ${siteID}:`, body);
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
if (!BYPASSRENDER) {
|
|
122
|
-
helpers.log(
|
|
123
|
-
'success',
|
|
124
|
-
`SET PAGES AS ACTIVE { DEPLOYED: TRUE } TOTAL ${createdPages.length}`
|
|
125
|
-
);
|
|
126
|
-
}
|
|
127
|
-
};
|
|
128
|
-
|
|
129
|
-
const generateSitemaps = async sites => {
|
|
130
|
-
for (const site of sites) {
|
|
131
|
-
const { id: siteID, languages } = site;
|
|
132
|
-
for (const lang of languages) {
|
|
133
|
-
AuthService.headers['lang'] = lang.id;
|
|
134
|
-
const response = await SitesService.getSiteMap(siteID);
|
|
135
|
-
const {
|
|
136
|
-
items: sitemapPagesGroup,
|
|
137
|
-
url: { home },
|
|
138
|
-
} = response;
|
|
139
|
-
|
|
140
|
-
if (!home) continue;
|
|
141
|
-
|
|
142
|
-
const langDomain = site.domains.find(
|
|
143
|
-
domain => Object.keys(domain)[0] == lang.id
|
|
144
|
-
);
|
|
145
|
-
if (!langDomain) continue;
|
|
146
|
-
|
|
147
|
-
const slug = Object.values(langDomain)[0];
|
|
148
|
-
const sitemaps = [];
|
|
149
|
-
for (const templateId of Object.keys(sitemapPagesGroup)) {
|
|
150
|
-
const sitemapPages = sitemapPagesGroup[templateId];
|
|
151
|
-
if (!sitemapPages.length) continue;
|
|
152
|
-
const siteMap = js2xmlparser.parse('urlset', {
|
|
153
|
-
'@': {
|
|
154
|
-
xmlns: 'http://www.sitemaps.org/schemas/sitemap/0.9',
|
|
155
|
-
'xmlns:xsi': 'http://www.w3.org/2001/XMLSchema-instance',
|
|
156
|
-
'xsi:schemaLocation':
|
|
157
|
-
'http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd',
|
|
158
|
-
},
|
|
159
|
-
url: sitemapPages,
|
|
160
|
-
});
|
|
161
|
-
const sitemapName = `/sitemap-${templateId.toLowerCase()}.xml`;
|
|
162
|
-
const exactPath = path.resolve(
|
|
163
|
-
__dirname,
|
|
164
|
-
`../../public/${slug}${sitemapName}`
|
|
165
|
-
);
|
|
166
|
-
helpers.log('info', `sitemap file exact path ${exactPath}`);
|
|
167
|
-
await saveFile(exactPath, siteMap);
|
|
168
|
-
sitemaps.push(
|
|
169
|
-
`${home.endsWith('/') ? home.slice(0, -1) : home}${sitemapName}`
|
|
170
|
-
);
|
|
171
|
-
}
|
|
172
|
-
if (!sitemaps.length) continue;
|
|
173
|
-
const siteMap = js2xmlparser.parse('sitemapindex', {
|
|
174
|
-
'@': {
|
|
175
|
-
xmlns: 'http://www.sitemaps.org/schemas/sitemap/0.9',
|
|
176
|
-
},
|
|
177
|
-
sitemap: sitemaps.map(loc => ({ loc })),
|
|
178
|
-
});
|
|
179
|
-
const exactPath = path.resolve(
|
|
180
|
-
__dirname,
|
|
181
|
-
`../../public/${slug}/sitemap.xml`
|
|
182
|
-
);
|
|
183
|
-
await saveFile(exactPath, siteMap);
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
};
|
|
187
|
-
|
|
188
|
-
const saveFile = (filePath, content) => {
|
|
189
|
-
try {
|
|
190
|
-
fs.unlinkSync(filePath);
|
|
191
|
-
helpers.log('info', 'sitemap file removed');
|
|
192
|
-
} catch (err) {
|
|
193
|
-
helpers.log('info', 'sitemap file not found');
|
|
194
|
-
}
|
|
195
|
-
try {
|
|
196
|
-
fs.appendFileSync(filePath, content);
|
|
197
|
-
helpers.log('info', 'sitemap file saved');
|
|
198
|
-
} catch (err) {
|
|
199
|
-
helpers.log('info', "can't create file");
|
|
200
|
-
}
|
|
201
|
-
};
|
|
202
|
-
|
|
203
|
-
exports.checkSites = checkSites;
|
|
204
|
-
exports.unpublishSites = unpublishSites;
|
|
205
|
-
exports.setPageRenderEnd = setPageRenderEnd;
|
|
206
|
-
exports.getSiteData = getSiteData;
|
|
207
|
-
exports.generateSitemaps = generateSitemaps;
|
|
Binary file
|