@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.
Files changed (72) hide show
  1. package/README.md +22 -14
  2. package/build/index.js +49 -0
  3. package/gatsby-browser.tsx +140 -0
  4. package/gatsby-config.ts +40 -0
  5. package/gatsby-node.ts +130 -0
  6. package/gatsby-ssr.tsx +63 -0
  7. package/index.js +4 -0
  8. package/package.json +119 -100
  9. package/scripts/build-reset.ts +9 -0
  10. package/scripts/griddo-exporter.ts +302 -0
  11. package/src/components/Head.tsx +207 -0
  12. package/src/components/template.tsx +90 -0
  13. package/src/components/types.ts +35 -0
  14. package/src/components/utils.ts +138 -0
  15. package/src/html.tsx +31 -0
  16. package/src/services/auth.ts +64 -0
  17. package/src/services/distributors.ts +153 -0
  18. package/src/services/domains.ts +27 -0
  19. package/src/services/navigation.ts +169 -0
  20. package/src/services/robots.ts +64 -0
  21. package/src/services/settings.ts +52 -0
  22. package/src/services/sites.ts +199 -0
  23. package/src/services/store-with-for-loop.ts +513 -0
  24. package/src/services/store-with-promise-all.ts +515 -0
  25. package/src/services/store.ts +513 -0
  26. package/src/types/api.ts +155 -0
  27. package/src/types/global.ts +72 -0
  28. package/src/types/navigation.ts +25 -0
  29. package/src/types/pages.ts +145 -0
  30. package/src/types/sites.ts +64 -0
  31. package/src/types/templates.ts +11 -0
  32. package/src/utils/api.ts +326 -0
  33. package/src/utils/cache.ts +114 -0
  34. package/src/utils/domains.ts +32 -0
  35. package/src/utils/folders.ts +147 -0
  36. package/src/utils/instance.ts +71 -0
  37. package/src/utils/pages.ts +534 -0
  38. package/src/utils/searches.ts +102 -0
  39. package/src/utils/shared.ts +131 -0
  40. package/src/utils/sites.ts +280 -0
  41. package/.babelrc +0 -7
  42. package/LICENSE +0 -1
  43. package/gatsby-browser.js +0 -115
  44. package/gatsby-config.js +0 -38
  45. package/gatsby-node.js +0 -273
  46. package/gatsby-ssr.js +0 -43
  47. package/scripts/griddo-exporter.js +0 -133
  48. package/src/api/index.js +0 -172
  49. package/src/components/template.js +0 -261
  50. package/src/html.js +0 -30
  51. package/src/images/readme.md +0 -1
  52. package/src/scripts/build-reset.js +0 -12
  53. package/src/services/auth.js +0 -44
  54. package/src/services/distributors.js +0 -85
  55. package/src/services/domains.js +0 -16
  56. package/src/services/navigation.js +0 -104
  57. package/src/services/robots.js +0 -37
  58. package/src/services/settings.js +0 -25
  59. package/src/services/sites.js +0 -110
  60. package/src/utils/cache.js +0 -70
  61. package/src/utils/component-lib-helpers.js +0 -56
  62. package/src/utils/dataLayer.js +0 -47
  63. package/src/utils/delay.js +0 -5
  64. package/src/utils/domains.js +0 -24
  65. package/src/utils/folders.js +0 -123
  66. package/src/utils/helpers.js +0 -144
  67. package/src/utils/index.js +0 -44
  68. package/src/utils/package.js +0 -20
  69. package/src/utils/pages.js +0 -236
  70. package/src/utils/searches.js +0 -62
  71. package/src/utils/sites.js +0 -207
  72. package/static/griddo-full-logo.png +0 -0
@@ -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;
@@ -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;
@@ -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