Skip to content

Commit 7a53f80

Browse files
fix: additional fixes on missing node data
1 parent 82b5085 commit 7a53f80

File tree

1 file changed

+79
-74
lines changed

1 file changed

+79
-74
lines changed

src/gatsby-node.js

Lines changed: 79 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ const handleCamelizeKeys = (obj) => {
5656
const handleCreateNodeFromData = async (item, nodeType, helpers, endpoint, reporter) => {
5757
const { createNode, createNodeId, createContentDigest } = helpers;
5858

59-
if (!isEmpty(nodeType)) {
59+
if (!isEmpty(nodeType) && !isEmpty(endpoint)) {
6060
const stringifiedItem = !isEmpty(item) ? convertObjectToString(item) : "";
6161
const uuid = randomUUID();
6262

@@ -257,15 +257,13 @@ exports.sourceNodes = async ({ actions: { createNode }, reporter, cache, createN
257257
// Create nodes from the data
258258
if (!isEmpty(updatedData)) {
259259
if (isArrayType(updatedData)) {
260-
updatedData?.map(async (datum) => {
261-
await handleCreateNodeFromData(datum, node.nodeName, helpers, datum?.contentLink?.url || site_url + node.endpoint, reporter);
262-
263-
return Promise.resolve(datum);
264-
});
260+
await Promise.allSettled(
261+
updatedData?.map(async (datum) => {
262+
await handleCreateNodeFromData(datum, node.nodeName, helpers, datum?.contentLink?.url || site_url + node.endpoint, reporter);
263+
})
264+
);
265265
} else if (isObjectType(updatedData)) {
266266
await handleCreateNodeFromData(updatedData, node.nodeName, helpers, updatedData?.contentLink?.url || site_url + node.endpoint, reporter);
267-
268-
return Promise.resolve(updatedData);
269267
} else {
270268
return Promise.resolve(updatedData);
271269
}
@@ -300,84 +298,91 @@ exports.sourceNodes = async ({ actions: { createNode }, reporter, cache, createN
300298
const auth = await optimizely.authenticate();
301299

302300
if (!isEmpty(auth?.access_token)) {
301+
const promises = [];
302+
303303
// Send log message to reporter if authentication was successful
304304
reporter.info(`[AUTH] ${convertObjectToString(auth?.access_token)}`);
305305

306-
await Promise.allSettled(
307-
endpoints.map(async ({ nodeName = null, endpoint = null }) => {
308-
const url = site_url + endpoint || "";
309-
310-
const results = await optimizely.get({
311-
url,
312-
headers: {
313-
...headers,
314-
"Authorization": `Bearer ${auth?.access_token}`,
315-
"Access-Control-Allow-Credentials": ACCESS_CONTROL_ALLOW_CREDENTIALS
316-
},
317-
endpoint: nodeName
318-
});
306+
// Convert above code using for loop
307+
for (let i = 0; i < endpoints.length; i++) {
308+
const { nodeName = null, endpoint = null } = endpoints[i];
309+
310+
const url = site_url + endpoint || "";
311+
312+
// Resolve the promise
313+
promises.push(
314+
await optimizely
315+
.get({
316+
url,
317+
headers: {
318+
...headers,
319+
"Authorization": `Bearer ${auth?.access_token}`,
320+
"Access-Control-Allow-Credentials": ACCESS_CONTROL_ALLOW_CREDENTIALS
321+
},
322+
endpoint: nodeName
323+
})
324+
.then((res) => {
325+
// Resolve the promise
326+
return {
327+
nodeName,
328+
data: res || null,
329+
endpoint
330+
};
331+
})
332+
);
333+
}
319334

320-
// Resolve the promise
321-
return {
322-
nodeName,
323-
data: results || null,
324-
endpoint
325-
};
326-
})
327-
)
335+
await Promise.allSettled(promises)
328336
.then(async (res) => {
329337
// Store the data in the cache
330338
if (!isEmpty(res)) {
331339
sourceData = res;
332-
}
333340

334-
// Create nodes from the cached data
335-
sourceData
336-
?.filter((item) => item?.status === "fulfilled")
337-
?.map(async (item) => {
338-
if (isArrayType(item.value.data)) {
339-
if (item.value.nodeName === "OptimizelyStoreContent" || item.value.nodeName === "OptimizelyHotelContent") {
340-
item.value.data?.Locations?.map(async (datum) => {
341-
const data = {
342-
nodeName: item.value.nodeName,
343-
data: datum,
344-
endpoint: item.value.endpoint
345-
};
346-
347-
await handleNodeCreation(data, reporter, helpers);
348-
});
341+
// Create nodes from the cached data
342+
sourceData
343+
?.filter((item) => item?.status === "fulfilled")
344+
?.map(async (item) => {
345+
if (isArrayType(item.value.data)) {
346+
if (item.value.nodeName === "OptimizelyStoreContent" || item.value.nodeName === "OptimizelyHotelContent") {
347+
item.value.data?.Locations?.map(async (datum) => {
348+
const data = {
349+
nodeName: item.value.nodeName,
350+
data: datum,
351+
endpoint: item.value.endpoint
352+
};
353+
354+
await handleNodeCreation(data, reporter, helpers);
355+
});
356+
} else {
357+
item.value.data?.map(async (datum) => {
358+
const data = {
359+
nodeName: item.value.nodeName,
360+
data: datum,
361+
endpoint: item.value.endpoint
362+
};
363+
364+
await handleNodeCreation(data, reporter, helpers);
365+
});
366+
}
349367
} else {
350-
item.value.data?.map(async (datum) => {
351-
const data = {
352-
nodeName: item.value.nodeName,
353-
data: datum,
354-
endpoint: item.value.endpoint
355-
};
356-
357-
await handleNodeCreation(data, reporter, helpers);
358-
});
368+
const data = {
369+
nodeName: item.value.nodeName,
370+
data: item.value?.data || null,
371+
endpoint: item.value.endpoint
372+
};
373+
374+
await handleNodeCreation(data, reporter, helpers);
359375
}
360-
} else {
361-
const data = {
362-
nodeName: item.value.nodeName,
363-
data: item?.value?.data || null,
364-
endpoint: item.value.endpoint
365-
};
366-
367-
await handleNodeCreation(data, reporter, helpers);
368-
}
369-
});
370-
371-
// Cache the data when the data is available and the environment is development
372-
if (!isEmpty(sourceData) || IS_DEV) {
373-
await cache
374-
.set(CACHE_KEY, sourceData)
375-
.then(() => reporter.info(`[CACHE] Cached ${sourceData.length} items successfully.`))
376-
.catch((err) => reporter.error(`[ERROR] ${err?.message || convertObjectToString(err) || "There was an error while caching the data. Please try again later."}`));
377-
}
376+
});
378377

379-
// Resolve the promise
380-
return sourceData;
378+
// Cache the data when the data is available and the environment is development
379+
if (!isEmpty(sourceData) && IS_DEV) {
380+
await cache
381+
.set(CACHE_KEY, sourceData)
382+
.then(() => reporter.info(`[CACHE] Cached ${sourceData.length} items successfully.`))
383+
.catch((err) => reporter.error(`[ERROR] ${err?.message || convertObjectToString(err) || "There was an error while caching the data. Please try again later."}`));
384+
}
385+
}
381386
})
382387
.catch((err) => {
383388
this.reporter.error(`[ERROR] ${err?.message || convertObjectToString(err) || "There was an error while fetching and expanding the endpoints. Please try again later."}`);

0 commit comments

Comments
 (0)