From 3c90f86450923a1451fc98e851dfd0c088d0c35b Mon Sep 17 00:00:00 2001 From: Nuno Freitas Date: Mon, 19 Apr 2021 19:54:10 +0100 Subject: [PATCH 1/3] refactor: add isIgnored function --- src/isIgnored.js | 5 +++++ src/sitemapItems.js | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 src/isIgnored.js diff --git a/src/isIgnored.js b/src/isIgnored.js new file mode 100644 index 0000000..be4cb7e --- /dev/null +++ b/src/isIgnored.js @@ -0,0 +1,5 @@ +"use strict"; + +const sitemapProperty = require("./sitemapProperty"); + +module.exports = (item) => sitemapProperty(item, "ignore") || !item.url; diff --git a/src/sitemapItems.js b/src/sitemapItems.js index c0034b1..d850804 100644 --- a/src/sitemapItems.js +++ b/src/sitemapItems.js @@ -1,11 +1,11 @@ "use strict"; +const isIgnored = require("./isIgnored"); const paginationItems = require("./paginationItems"); const sitemapItem = require("./sitemapItem"); -const sitemapProperty = require("./sitemapProperty"); module.exports = (items, options) => items .flatMap(paginationItems) - .filter((item) => !sitemapProperty(item, "ignore") && item.url) + .filter((item) => !isIgnored(item)) .map((item) => sitemapItem(item, options)); From 201d4bdda293021ee7d8c30725f45efe6f4d0220 Mon Sep 17 00:00:00 2001 From: Nuno Freitas Date: Mon, 19 Apr 2021 20:06:31 +0100 Subject: [PATCH 2/3] chore(git): eol for js files --- .gitattributes | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..4964429 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.js eol=lf From bdbce09bd7dc297cff7cd4e49aaa9a70e5cf3a6e Mon Sep 17 00:00:00 2001 From: Nuno Freitas Date: Mon, 19 Apr 2021 20:12:38 +0100 Subject: [PATCH 3/3] fix: duplicated items If there are multiple items with the same URL, only the first one will be included in the sitemap. fix #20 --- examples/pagination/posts.njk | 1 + src/isDuplicated.js | 16 ++++++++++++++++ src/sitemapItems.js | 6 +++++- 3 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 src/isDuplicated.js diff --git a/examples/pagination/posts.njk b/examples/pagination/posts.njk index 289dd71..7bc24f0 100644 --- a/examples/pagination/posts.njk +++ b/examples/pagination/posts.njk @@ -3,6 +3,7 @@ pagination: data: posts size: 1 alias: post + addAllPagesToCollections: true permalink: "{{ post.url }}/" --- diff --git a/src/isDuplicated.js b/src/isDuplicated.js new file mode 100644 index 0000000..dfa07cf --- /dev/null +++ b/src/isDuplicated.js @@ -0,0 +1,16 @@ +"use strict"; + +module.exports = (item, index, collection) => { + if (!collection) { + return false; + } + + const notFoundIndex = -1; + const firstIndex = collection.findIndex((other) => other.url === item.url); + + if (firstIndex === notFoundIndex) { + return false; + } + + return index !== firstIndex; +}; diff --git a/src/sitemapItems.js b/src/sitemapItems.js index d850804..16afced 100644 --- a/src/sitemapItems.js +++ b/src/sitemapItems.js @@ -1,11 +1,15 @@ "use strict"; const isIgnored = require("./isIgnored"); +const isDuplicated = require("./isDuplicated"); const paginationItems = require("./paginationItems"); const sitemapItem = require("./sitemapItem"); module.exports = (items, options) => items .flatMap(paginationItems) - .filter((item) => !isIgnored(item)) + .filter( + (item, index, collection) => + !isIgnored(item) && !isDuplicated(item, index, collection) + ) .map((item) => sitemapItem(item, options));