Skip to content

Commit dae5664

Browse files
committed
prevent duplicate nodes for remote media files
1 parent e9809fc commit dae5664

File tree

1 file changed

+51
-23
lines changed

1 file changed

+51
-23
lines changed

packages/gatsby-source-wordpress/src/normalize.js

Lines changed: 51 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -385,32 +385,60 @@ exports.downloadMediaFiles = async ({
385385
cache,
386386
createNode,
387387
_auth,
388-
}) =>
389-
Promise.all(
390-
entities.map(async e => {
391-
let fileNode
392-
if (e.__type === `wordpress__wp_media`) {
393-
try {
394-
fileNode = await createRemoteFileNode({
395-
url: e.source_url,
396-
store,
397-
cache,
398-
createNode,
399-
auth: _auth,
400-
})
401-
} catch (e) {
402-
// Ignore
388+
}) => {
389+
const remoteCache = {}
390+
const cacheId = url => `gatsby-source-wordpress-remote-file-node-id-${url}`
391+
392+
const createMediaFileNodes = async () =>
393+
Promise.all(
394+
entities.map(async e => {
395+
if (e.source_url && remoteCache[e.source_url]) {
396+
return e
403397
}
404-
}
405398

406-
if (fileNode) {
407-
e.localFile___NODE = fileNode.id
408-
delete e.media_details.sizes
409-
}
399+
let fileNode
400+
if (e.__type === `wordpress__wp_media`) {
401+
try {
402+
remoteCache[e.source_url] = true
403+
fileNode = await createRemoteFileNode({
404+
url: e.source_url,
405+
store,
406+
cache,
407+
createNode,
408+
auth: _auth,
409+
})
410+
} catch (e) {
411+
// Ignore
412+
}
413+
}
414+
if (fileNode) {
415+
await cache.set(cacheId(e.source_url), fileNode.id)
416+
}
410417

411-
return e
412-
})
413-
)
418+
return e
419+
})
420+
)
421+
422+
const mapLocalFileNodes = async () =>
423+
Promise.all(
424+
entities.map(async e => {
425+
if (e.__type === `wordpress__wp_media`) {
426+
const cachedNodeId = await cache.get(cacheId(e.source_url))
427+
if (cachedNodeId) {
428+
e.localFile___NODE = cachedNodeId
429+
delete e.media_details.sizes
430+
}
431+
}
432+
433+
return e
434+
})
435+
)
436+
437+
entities = await createMediaFileNodes()
438+
entities = await mapLocalFileNodes()
439+
440+
return entities
441+
}
414442

415443
const createACFChildNodes = (
416444
obj,

0 commit comments

Comments
 (0)